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 :

Modeliser l'ouverture et la fermeture d'une porte


Sujet :

Simulink

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 209
    Par défaut Modeliser l'ouverture et la fermeture d'une porte
    Bonjour a tous,

    Je suis entrain de modéliser l'action d'un utilisateur sur l'ouverture et la fermeture d'une porte sous simulink. J'ai recours à votre aide après plusieurs jours de vaines tentatives. En effet, la porte est modélisée par un float qui prend des valeurs entre 0 et 1. 0 pour dire que la porte est totalement ouverte et 1 pour dire qu'elle est totalement fermée. J'ai besoin comme input de l'action de l'utilsateur qui est boolean (0: si l'utilisateur envoie l'ordre d'ouverture et 1 s'il veut fermer la porte) et de la duree de l'ouverture et de fermeture ( dans mon cas, la duree de l'ouverture est egale à celle de fermeture).

    supposons que la duree d'ouverture est egale â 2, que la porte est initialement totalement ouverte et que l'utilisateur envoie un ordre sous forme de crenaux ( =1 jusqu'à l'instant 3 ensuite s'annule apres cet instant).
    la sortie état de la porte ne doit pas aller en dehors de l'intervalle [0,1]. donc, au début, en utilisant un bloc intégrateur fourni sous simulink, et en intégrant (1/(duree d'ouverture)), on obtient un etat de la porte aui varie lineairement jusqu'a 2s où il atteint 1 ensuite il sature a la valeur de 1 jusqu'a l'instant 3s, ce qui est normal. Le probleme c'est que apres 3s, l'output etat de la porte chute brusequement a la valeur 0 et pourtant, j'avais prevu un integrateur de pente -1 au cas où l'ordre de l'utilisateur passe à 0.

    je vous met en pièce jointe mon model.

    sinon, j'ai aussi essaye de remplacer mon model par un bloc "embedded matlab code" mais ca ne marche pas non plus: voici mon code:

    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
    % u est l'action de l'utilisateur
    % a une droite de pente 1
    %b une droite de pente -1
    %y est la sortie: etat de la porte.
     
    function y = fcn(u,a,b)
     
    %y pour dire que lq porte est initialement totalement ouverte
    y=0.0;
     
    if (u==0)
        if (y>0)
        y=b+y;
        else
           y=0
    elseif(u==1)
        if(y<1)
         y=a+y;
        else
            y=1
    end


    quelqu'un a une idee ?
    Merci beaucoup,
    Fichiers attachés Fichiers attachés

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 209
    Par défaut
    Rebonjour,

    Est ce que vous pensez qu'il y a moyen d'éviter les "switches" dans mon modèle simulink ?
    avez d'autre idée plus simple d'un code matlab qui modélise l'ouverture et la fermeture d'une porte ?

    Merci beaucoup

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Le code ci-dessus est faux... il manque des end...

    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
    function y = fcn(u,a,b)
    
    y = 0;
    
    if u==0
        
        if y>0
            y = b+y;
        else
            y = 0;
        end
        
    elseif u==1
        
        if y<1
            y = a+y;
        else
            y = 1;
        end
        
    end

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 209
    Par défaut
    MErci pour la réponse.
    A part ça, niveau algorithmique, est ce que le code traduit bien l'action d'un utilisateur sur une porte ?

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Par défaut
    Bonjour.
    d'autre idée plus simple d'un code matlab qui modélise l'ouverture et la fermeture d'une porte
    Une idée avec simulink

    (simout pour exploiter les données sous matlab. Exemple :
    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
    porte;%Appel du programme simulink
     figNumber=figure( ...
          'Name','Porte', ...
          'NumberTitle','off', ...
          'Visible','off', ...
          'DoubleBuffer','on', ...
          'Color', [0.8 0.8 0.8]);
       axes( ...
          'Units','normalized', ...
          'Position',[0.05 0.05 0.75 0.90], ...
          'Visible','off', ...
          'NextPlot','add');
     figure(figNumber);
       L=10;x=[0 0];y=[0 0];
       y0=5;x0=7.5;
       h=plot(x,y);
       set(h,'color',[1 0 0]);
       set(h,'lineWidth',4);
       axis([-10 10 -10 10])
       nb=0;
       while nb < length(simout)
         nb=nb+1;
         theta=simout(nb)*pi/180;
         x=[x0 -L*sin(theta)+x0];
         y=[y0 -L*cos(theta)+y0];
         set(h,'Xdata',x,'YData',y)
         drawnow
        end
        if theta<0.01
        text(0,10,'Porte ouverte');
    else
          text(0,10,'Porte fermée');
    end
    Un exemple tout matlab :
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Comment détecter l'ouverture et la fermeture d'une session Windows avec Java
    Par nhila8 dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 18/03/2012, 16h37
  2. [MySQL] [debutante]ouverture et fermeture d'une page
    Par canary dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/03/2009, 15h22
  3. Réponses: 14
    Dernier message: 22/12/2008, 13h50
  4. [Excel] ouverture et fermeture d'une application
    Par Chewi dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/02/2007, 16h25
  5. ouverture/fermeture d'une fenêtre modale showModelessDialog
    Par marti dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/01/2006, 05h03

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