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,
Partager