Partage
  • Partager sur Facebook
  • Partager sur Twitter

Bouton d'arrêt d'urgence en Python

    17 septembre 2017 à 21:28:15

    Bonjour,

    pour mon projet j'utilise une carte Uno codée en Python (pyFirmata), et j'ai besoin pour la sécurité d'un bouton d'arrêt d'urgence.

    Donc dès que j'appuie sur un bouton, le programme arrête la fonction en cours et effectue une fonction définie.

    Comment faire ?

    D'avance merci

    • Partager sur Facebook
    • Partager sur Twitter
      19 septembre 2017 à 13:02:36

      Ce serait bien que tu nous en dise un peu plus sur ton projet ;)

      - Le bouton d'arrêt d'urgence est-il connecté à l'arduino ou à la carte exécutant le code python ?

      - La fonction à exécuter est-elle codée sur arduino ou est-elle codée en python ?

      • Partager sur Facebook
      • Partager sur Twitter
        19 septembre 2017 à 23:51:45

        Le bouton sera relié à la carte Arduino.

        Je code en ce moment avec pyFirmata, et pas de code dans la carte Arduino.

        Donc la fonction à exécutée sera codée en Python.

        Merci :)

        • Partager sur Facebook
        • Partager sur Twitter
          20 septembre 2017 à 8:06:57

          Si le code est sur la carte python, pourquoi ne pas lire de temps en temps la pin du bouton d'arrêt d'urgence et appeler ta fonction d'arrêt si celui-ci est enfoncé ?
          • Partager sur Facebook
          • Partager sur Twitter
            21 septembre 2017 à 8:32:14

            C'est pour un "vrai" projet, et pour un arrêt d'urgence on ne lit pas de temps en temps en industrie :/

            Je pensais utiliser les threads, vous en pensez quoi ?

            • Partager sur Facebook
            • Partager sur Twitter
              21 septembre 2017 à 10:17:55

              J'avoue avoir un petit sourire en coin en lisant le message "pour un arrêt d'urgence on ne lit pas de temps en temps en industrie".

              Je suis tout à fait d'accord avec toi, un bouton d'arrêt d'urgence ce doit d'être extrêmement réactif donc faire une lecture cyclique n'est pas forcément la meilleurs solution.

              Sauf que ce que tu viens de dire est en contradiction totale avec ton architecture Arduino<=>Python.

              Quelques explications s'imposent :

              Sur ton arduino, tu as le code de pyfirmata qui s'exécute de façon à déporter les fonctions de l'arduino sur le processeur python.

              Ce code exécute plusieurs actions de façon cyclique : lecture entrée numérique, lecture entrée analogique, gestion communication USB, affectation sortie...

              Du coup, tu as déjà un premier problème dû au fait que l'arduino ne va pas réagir tout de suite au bouton d'arrêt d'urgence car il fait une lecture cyclique.

              Ensuite, lorsque l'arduino va lire l'état du bouton, il va détecter le changement et donc envoyer cette information au processeur python.

              Là, tu as un second problème dû au fait que tu ne maitrises pas les priorités de communications donc l'arduino peut très bien communiquer le changement d'autres entrée avant de communiquer le changement de l'entrée d'arrêt d'urgence, ce qui représente une perte de temps inutile.

              Tu as aussi un troisième problème dû au fait qu'il s'agit d'une communication série émulée par USB qui induit forcément des temps de latence à cause des différents étages de buffer des drivers et des OS qui attendent généralement un peu avant d'envoyer les données de façon à pouvoir les envoyer par paquet.

              Tu ne maitrise pas non plus le système d'exploitation de la carte exécutant le code python donc il peut très bien y avoir un temps de réaction supplémentaire si l'OS a mis en pause temporairement le programme python pour exécuter un autre programme (si il y a plusieurs programme et un seul cœur sur le processeur de la carte, tu n'y couperas pas).

              Et enfin, une fois que le programme python aura reçu ce changement, tu as avoir tus ces problèmes en sens inverse :

              - temps de latence dû aux buffer quand le python va envoyer des ordres à l'arduino

              - temps de latence dû au fait que pyfirmata va peut-être envoyer d'autres informations avant l'information critique de l'arrêt d'urgence

              - temps de latence dû au fait que l'arduino est peut-être en train de scanner les entrées et non d'affecter les sorties quand il recevra la réponse

              Du coup, on ne peut pas vraiment dire que c'est extrêmement réactif alors si tu as un temps de cycle de quelques millis ou dizaines de millis secondes sur ton code python, rajouter un scan cyclique de l'arrêt d'urgence ne posera pas vraiment de problèmes.

              Si tu veux être ultra réactif, tu ferais mieux de rajouter quelques lignes de code dans l'arduino pour traiter les éléments critique de l'arrêt d'urgence (arrêter un moteur par exemple) puis laisser le code python prendre le relais pour traiter le reste de l'arrêt d'urgence (passer des voyants en rouge, allumer une alarme...)

              -
              Edité par lorrio 21 septembre 2017 à 10:19:58

              • Partager sur Facebook
              • Partager sur Twitter
                22 septembre 2017 à 16:32:51

                Hello. En industrie un bouton d’arrêt d'urgence ça se connecte sur l'alim, voire sur un relais qui coupe l'alim, bref que de l'analogique. En tout cas jamais sur un système numérique susceptible de planter et donc de ne plus réagir au bouton d’arrêt d'urgence. C'est une question de sécurité

                • Partager sur Facebook
                • Partager sur Twitter
                  23 septembre 2017 à 10:53:42

                  Je vois "arrêt d'urgence" d'un coté, Arduino de l'autre, de plus il y a mention d'Industrie. Je suis horrifié de voir faire un arrêt d'urgence dans ces conditions.

                  Si tel est le vraiment le cas la machine doit être conforme à la directive machine  les risques doivent être évalués, l'application de la norme harmonisée NF EN ISO 13849-1 est vivement recommandée. Le niveau de performance (PLr) doit être établi et respecté. En général, cela se fait par des coupures physiques comme l'a indiqué MizAmbal. Quand on veut le faire par processeur + software, les dispositifs utilisent généralement 2 processeurs différents + 2 logiciels différents, et un contrôle d'identité de résultat, en cas de doute l'arrêt est immédiatement déclenché.

                  Pour donner un exemple d’exigence, un niveau de sécurité moyen n'admet pas plus d'une faute sur une période de 30 ans.   

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Bouton d'arrêt d'urgence en Python

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown