Porte coulissante

L’exercice suivant peut être réalisé à l’aide de MATLAB/Simulink/Stateflow.

Les bibliothèques suivantes sont nécessaires :

Ressources :

Description du système

Une porte coulissante automatique doit s’ouvrir lorsqu’une personne se présente.

Source animation : https://sitelec.org/flash/exercices_grafcet.htm

Elle est dotées de différents capteurs :

  • 4 capteurs de position (ToR) :
    • S1 : position fermée
    • S2 : position « presque » fermée
    • S3 : position « presque » ouverte
    • S4 : position ouverte
  • 1 capteur de présence (ToR) :
    • S5 : indique qu’une personne se présente devant la porte

Le moteur se commande par 4 variables binaires :

  • KM1 : ouverture
  • KM2 : fermeture
  • KM3 : grande vitesse
  • KM4 : petite vitesse

 

Comportement attendu

Porte fermée, la détection de la présence d’une personne avec S5 provoque l’ouverture de la porte à grande vitesse. Lorsque la porte est presque ouverte (S3) le mouvement ralentit, puis s’arrête lorsque la porte est complètement ouverte (S4).

10 secondes plus tard, la porte se referme, à grande vitesse au début, puis à vitesse réduite lorsqu’elle est presque fermée (S2), et enfin s’arrête lorsqu’elle est complètement fermée (S1).

Si une personne s’attarde ou se présente en phase de fermeture (S5) la porte s’ouvre à nouveau.

 

Comment fait-on 10s ?

Pour faire une temporisation avec Stateflow, utiliser la condition suivante :

after(n, sec)

qui devient VRAIE n secondes après l’activation de l’état d’où part la transition utilisant cette condition.

 

Travail demandé

Dans chacun des états du diagramme Stateflow, définir les valeurs des variables de commande du moteur (KM1, KM2, KM3 et KM4).

 

Définir les transitions et leurs conditions permettant de réaliser un cycle « simple » : une unique personne se présente, mais ne s’attarde pas et franchit la porte aussitôt ouverte.

Lancer la simulation et tester le fonctionnement de la porte coulissante, en essayant d’envisager tous les scénarios possibles.

Correction

On constate que lorsqu’une personne se présente devant la porte alors qu’elle commence juste à se refermer (entre les capteurs S3 et S4), alors elle s’ouvre à grande vitesse ! Cela pose un problème : pour des raisons de dynamique, la porte doit arriver en butée à petite vitesse (cela évite les chocs trop importants).

 

Pour éviter cela, il faudrait connaître à tout instant la position de la porte :

  • Complètement fermée
  • Entre S1 et S2
  • Entre S2 et S3,
  • Entre S3 et S4
  • Complètement ouverte

Pour cela on se propose de rajouter un super-état contenant chacun de ces états de la porte.

Super-état

Un super-état est un état qui en contient d’autres.

Le plus souvent, on souhaite que chaque super-état d’un diagramme fonctionne en parallèle :

Cliquer-droit sur le fond du diagramme et sélectionner Decomposition/Parallel (AND)

A présent, les états du diagramme apparaissent en pointillés :

Et chacun doit comporter un état doté d’une transition par défaut :

 

Il est interdit de faire des transitions d’un super-état à un autre !!

Pour qu’une transition puisse opérer, on utilise les variables d’états, sous la forme : in(nom_superetat.nom_etat)

Exemple : le super-état Tapis_arrivee peut utiliser la variable in(Systeme.ON)

 

Intégrer l’intégralité du diagramme précédent dans un super-état, puis ajouter un nouveau super-état nommé « Position » fonctionnant en parallèle du premier.

 

Intégrer au super-état « Position » l’ensemble des états possibles de la porte, ainsi que les transitions nécessaires.

Lancer la simulation et tester le fonctionnement de la porte coulissante : vérifier que la position réelle de la porte correspond bien à l’état actif du super-état « Position ».

Correction

Décomposer le super-état principal (celui qui gère le mouvement) en 2 super-états :

  • « Sens »: qui gère le sens du mouvement de la porte (et son arrêt)
  • « Vitesse » : qui gère la vitesse du mouvement

Lancer la simulation et tester le fonctionnement de la porte coulissante : vérifier bien que le problème évoqué après la question 2 est bien résolu !.

Correction

Remarque : on peut remplacer in(Sens.Fermeture) par KM2==1, mais c’est moins dans l’esprit des super-états …

 

 

 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *