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 :

Comment utiliser correctement simulink ?


Sujet :

Simulink

  1. #1
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut Comment utiliser correctement simulink ?
    Bonjour,

    Je m'adresse aux utilisateurs vétérans de simulink...

    Comme certains le savent peut-être déjà, je travaille sur un projet ("confidentiel" --> je ne peux pas poster les sources de ce sur quoi je bosse, donc pas simple pour demander de l'aide ) : les pilotes automatiques d'hélicoptères.

    Une partie de mon travail consiste à intégrer un pilote automatique (créé sur simulink) sur simulateur. Jusque là tout va "à peu près bien"... là où ça se corse, c'est que le simulateur est utilisé par beaucoup de personnes, donc je ne peux pas faire mes modifications et mes tests directement dessus, car sinon ça coûterait trop cher.

    Bref, tout ça pour en arriver à l'introduction de mon problème... j'ai créé sur simulink un "faux simulateur" qui ne fait que des simulations temporelles de mon système, et sur lequel j'ai intégré mon pilote automatique. Vous pouvez imaginer le gros "bordel" (des centaines de variables, des blocs, des sous-sous-blocs etc... qui s'imbriquent dans tous les sens, des boucles de régulations à gogo, etc...).

    Et mon problème est le suivant : dans ce gros bordel - excusez-moi l'expression, mais c'est le cas - je ne suis plus sûr de savoir où commence ma simulation... c'est vrai : où est-ce que simulink débute sa simulation ?

    J'ai une grosse envie : remettre à plat mon "faux simulateur" en utilisant des méthodes d'utilisation de simulink un peu plus structurée que ce que j'ai fait jusqu'à maintenant. Du coup, est-ce que quelqu'un pourraît m'indiquer des conseils, tutos, voire même exemples un peu complexes sur l'utilisation de simulink... ?

    Si je pose ce genre de question, c'est en particulier à cause d'un souci que j'ai : ma simulation débute bien à l'instant "0", mais les variables sont toutes initialisées à 0 pendant genre 0.02 secondes, alors qu'elles devraient débuter à des valeurs non nulles... Après ces 0.02 secondes, la simulation débute "correctement", mais pendant ces 0.02 secondes, une grande partie de mes variables sont à 0, alors qu'elles ne devraient pas l'être !

    Petite précision : je travaille avec des variables discrètes, des représentations d'état ayant des conditions initiales spécifiées correctement, mais j'ai l'impression que ces valeurs ne sont pas prises en compte à l'instant initial... mais correctement aux instants suivants... (à partir de l'instant T0 + 2). De plus j'ai utilisé un "Embedded Model" pour appeler mon module de "pilote automatique" dans mon modèle complet (qui utilise les mêmes paramètres temporels et de calcul que mon modèle global). Par ailleurs, j'ai dû utiliser des blocs "Memory" et "RateTransition" pour enlever des erreurs que j'avais dans mes simulations.

    Cordialement,

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 883
    Points : 3 431
    Points
    3 431
    Par défaut
    Salut

    bon, c'est pas une réponse, mais peut être quelques pistes

    tu as dans le menu format le sous menu block display ou tu peux afficher l'ordre des blocks dans ton simulink
    après pour le modifier c'est compliqué, voir impossible à maitiser
    faut bien compartimenter ses différentes parties, entre autre en terme de temps d'échantillonnage (mémoire, 1/z, zero order hold, RateTransition ...)
    tu peux aussi essayer des sous systeme que tu déclare comme 'atomic' (block properties' afin qu'ils soient exécuté en une fois (dur dur à gérer, enfin à mon niveau)

    pour tes 0.2 secondes de départs, peut être peut tu arranger la chose en utilisant des blocks IC bien placés

    sinon mettre un enable dans ton pilote auto afin qu'il ne démarre que quand certaines conditions sont réunies et considérer que ton modèle a besoin de temps (0.2s) pour être exploitable

  3. #3
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    Merci déjà pour cette réponse, ma question étant vague, je n'attends pas de réponse précise, et la tienne correspond tout à fait aux types de conseils que je cherche. Merci encore.

    Si quelqu'un a d'autres idées, je suis preneur. Je teste dès que j'ai le temps car je bosse sur d'autres trucs en même temps, et ce code simulink est moins prioritaire que le reste. Je ferai un "bilan" à la fin.

  4. #4
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    Bonjour,

    Bon, j'ai refait mon schéma en entier, et je te remercie pour ton aide qui m'a été précieuse.

    J'ai refait mon schéma de simulation au complet (en conservant tout de même mon modèle de pilote automatique), et j'ai utilisé plusieurs outils :

    - Blocs mémoire pour contrer les "boucles algébriques" ==> grâce à ces blocs, on sait exactement où commence la boucle (après le bloc mémoire) et où elle se termine (avant le bloc mémoire) sachant que le bloc mémoire offre la possibilité de configurer la valeur initiale que l'on veut pour le signal considéré.

    - Menu "Format -> Block Display -> Sorted Order" pour afficher l'ordre des blocs : cela permet de s'assurer que les blocs se déroulent dans le bon ordre.

    - Menu "Format -> Block Display -> Port/Signal Display" pour mettre des couleurs sur les niveaux d'exécution... peu compréhensible mais ça m'a aidé...

    - Utilisation des blocs rate transition à chaque endroit où j'avais des warning : incompréhensible, mais ces blocs suppriment ces warning. (c'est incompréhensible parce que les rate sont les mêmes partout, il me met des warning sur certains ports mais pas sur d'autres alors qu'ils sont au même niveau...bref)

    - Utilisation de la propriété "Clique droit sur un bloc -> SubSystem Parameters... -> Treat as atomic unit" ==> si la simulation fonctionne comme il faut après avoir activé cette option, ça veut dire que tous les précédents blocs ont été bien positionné ==> FINISH ! (en plus ça mets l'encadré du bloc en gras, c'est joli comme tout, ça fait pro).

    En procédant de proche en proche en effectuant des tests à chaque fois, j'en suis arrivé à savoir pourquoi tel où tel signal était mal initialisé, pourquoi j'avais 2 à 3 pas de retards par moments (utilisation de trop de blocs mémoires à des endroits où il n'en fallait pas), pourquoi j'avais des centaines de warnings, et pourquoi les pas de temps n'étaient pas respectés...

    Bref, maintenant, ça marche, mes signaux sont tous initialisés comme il faut à l'instant 0 (!!!)

    Je peux commencer à travailler maintenant.

    Cordialement,

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 16/08/2007, 11h40
  2. [D6] Comment utiliser correctement TOutlookApplication ?
    Par PomaH dans le forum Web & réseau
    Réponses: 6
    Dernier message: 11/07/2007, 11h01
  3. comment utiliser correctement les sessions?
    Par cladsam dans le forum Langage
    Réponses: 5
    Dernier message: 06/02/2006, 11h56
  4. [C#] Comment utiliser correctement Stream.Read ?
    Par ArChAnGe76 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 20/12/2005, 20h48
  5. Comment utiliser correctement le debugger de DevCPP
    Par Le Furet dans le forum Dev-C++
    Réponses: 2
    Dernier message: 29/09/2005, 09h56

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