From 5ddf339ebf26446cde7202b896eb527df413d71c Mon Sep 17 00:00:00 2001 From: phroy Date: Wed, 9 Mar 2022 21:46:25 +0100 Subject: [PATCH] maj des corrections avec la nouvelle gestion des threads --- .../porcou_cmd-correction-simple.py | 100 ++++++++---------- .../porcou_cmd-correction.py | 90 ++++++++-------- 2 files changed, 84 insertions(+), 106 deletions(-) diff --git a/Lycee/programmation_python/si/portail_coulissant/porcou_cmd-correction-simple.py b/Lycee/programmation_python/si/portail_coulissant/porcou_cmd-correction-simple.py index 2a60501..662c2b0 100644 --- a/Lycee/programmation_python/si/portail_coulissant/porcou_cmd-correction-simple.py +++ b/Lycee/programmation_python/si/portail_coulissant/porcou_cmd-correction-simple.py @@ -1,41 +1,37 @@ import bge # Bibliothèque Blender Game Engine (UPBGE) -import threading # Multithreading from porcou_lib import * # Bibliothèque portail coulissant ############################################################################### -# porcou_cmd.pyg +# porcou_cmd.py # @title: Commandes du portail coulissant ############################################################################### +############################################################################### +# Gestion des tâches (threads) << NE PAS MODIFIER CETTE SECTION >> +############################################################################### + +threads=[] scene = bge.logic.getCurrentScene() -############################################################################### -# Execution des commandes utilisateurs dans une tâche séparée (thread) de UPBGE << NE PAS MODIFIER CETTE SECTION >> -############################################################################### - -threads=[] - def start(): - threads.append(threading.Thread(target=commandes)) - print ("Thread start() ...") - threads[len(threads)-1].start() - -def stop(): - print ("Thread join() ...") - threads[len(threads)-1].join(0.1) + thread_start(threads, commandes) -############################################################################### +def stop(): + thread_stop(threads) + +############################################################################### # Instructions élémentaires pour le portail coulissant # -# Actions (ordre = True ou False) : : +# Actions (ordre = True ou False) : # - Gyrophare : gyr (True|False) # - Ouvrir le portail (moteur sens trigo) : mot_o (True|False) -# - Fermer le portail (moteur sens horaire) : mot_f (True|False) +# - Fermer le portail (moteur sens horaire) : mot_f (True|False) +# - Emetteur pour le capteur barrage IR : ir_emet(True|False) # # Capteurs (valeur retournée = True ou False) : # - Capteur fin de course portail ouvert : fc_o() # - Capteur fin de course portail fermé : fc_f() -# - Capteur barrage IR : ir_recep() +# - Capteur barrage IR (absence d'obstacle) : ir_recep() # # Pupitre (valeur retournée = True ou False) : # - Bouton poussoir coté rue : bp_ext() @@ -46,50 +42,38 @@ def stop(): # ############################################################################### - -############################################################################### -# Fonctions -############################################################################### - - -############################################################################### -# Commandes -############################################################################### - def commandes(): - scene.objects['Systeme']['thread_alive']=True # Tâche vivante (thread) << NE PAS MODIFIER CETTE LIGNE >> - ############################################################################### - # Allee-retour - ############################################################################### + ############################################################################### + # Allée-retour simple (sans la sécurité anti-écrasement lors de la fermeture) + ############################################################################### - # Mise en place : Fermeture - while (fc_f() ==False) : - gyr(True) - mot_f(True) - mot_f(False) - gyr(False) + # Mise en place : Fermeture + while (fc_f() ==False) : + gyr(True) + mot_f(True) + mot_f(False) + gyr(False) - # Fonctionnement normal - while True : + # Fonctionnement normal + while True : - # Ouverture - if bp_int() or bp_ext() : - while fc_o() ==False: - gyr(True) - mot_o(True) - gyr(False) - mot_o(False) + # Ouverture + if bp_int() or bp_ext() : + while fc_o() ==False: + gyr(True) + mot_o(True) + gyr(False) + mot_o(False) - tempo(2) # Temporisation + tempo(2) # Temporisation - # Fermeture - while fc_f() ==False: - gyr(True) - mot_f(True) - gyr(False) - mot_f(False) + # Fermeture + while fc_f() ==False: + gyr(True) + mot_f(True) + gyr(False) + mot_f(False) - - scene.objects['Systeme']['thread_alive']=False # Tâche morte (thread) << NE PAS MODIFIER CETTE LIGNE >> - print ("Thread fermé") + print ("Thread #", len(threads)-1, "arrivé au bout -> fermeture.") # Tâche close (thread) << NE PAS MODIFIER CETTE LIGNE >> + scene.objects['Systeme']['thread_run']=False # Fin du cycle << NE PAS MODIFIER CETTE LIGNE >> diff --git a/Lycee/programmation_python/si/portail_coulissant/porcou_cmd-correction.py b/Lycee/programmation_python/si/portail_coulissant/porcou_cmd-correction.py index 1de361b..43c8771 100644 --- a/Lycee/programmation_python/si/portail_coulissant/porcou_cmd-correction.py +++ b/Lycee/programmation_python/si/portail_coulissant/porcou_cmd-correction.py @@ -1,5 +1,4 @@ import bge # Bibliothèque Blender Game Engine (UPBGE) -import threading # Multithreading from porcou_lib import * # Bibliothèque portail coulissant ############################################################################### @@ -7,24 +6,20 @@ from porcou_lib import * # Bibliothèque portail coulissant # @title: Commandes du portail coulissant ############################################################################### +############################################################################### +# Gestion des tâches (threads) << NE PAS MODIFIER CETTE SECTION >> +############################################################################### + +threads=[] scene = bge.logic.getCurrentScene() -############################################################################### -# Execution des commandes utilisateurs dans une tâche séparée (thread) de UPBGE << NE PAS MODIFIER CETTE SECTION >> -############################################################################### - -threads=[] - def start(): - threads.append(threading.Thread(target=commandes)) - print ("Thread start() ...") - threads[len(threads)-1].start() - -def stop(): - print ("Thread join() ...") - threads[len(threads)-1].join(0.1) + thread_start(threads, commandes) -############################################################################### +def stop(): + thread_stop(threads) + +############################################################################### # Instructions élémentaires pour le portail coulissant # # Actions (ordre = True ou False) : @@ -49,49 +44,48 @@ def stop(): # Fermer le portail def fermer(): - ir_emet(True) - while fc_f() ==False: - gyr(True) - mot_o(False) - mot_f(True) - if ir_recep()==False or bp_int() or bp_ext() : # Ouverture en cas présence d'obstacle ou boutons - ouvrir() - tempo(2) # Temporisation 2s - gyr(False) - mot_f(False) - ir_emet(False) + ir_emet(True) + while fc_f() ==False: + gyr(True) + mot_o(False) + mot_f(True) + if ir_recep()==False or bp_int() or bp_ext() : # Ouverture en cas présence d'obstacle ou boutons + ouvrir() + tempo(2) # Temporisation 2s + gyr(False) + mot_f(False) + ir_emet(False) # Ouvrir le portail def ouvrir(): - while fc_o() ==False: - gyr(True) - mot_f(False) - mot_o(True) - gyr(False) - mot_o(False) + while fc_o() ==False: + gyr(True) + mot_f(False) + mot_o(True) + gyr(False) + mot_o(False) def commandes(): - scene.objects['Systeme']['thread_alive']=True # Tâche vivante (thread) << NE PAS MODIFIER CETTE LIGNE >> - ############################################################################### - # Allée-retour avec la sécurité anti-écrasement lors de la fermeture - ############################################################################### + ############################################################################### + # Allée-retour avec la sécurité anti-écrasement lors de la fermeture + ############################################################################### - # Mise en place : Fermeture - fermer() + # Mise en place : Fermeture + fermer() - # Fonctionnement normal - while True : + # Fonctionnement normal + while True : - # Ouverture - if bp_int() or bp_ext() : - ouvrir() + # Ouverture + if bp_int() or bp_ext() : + ouvrir() - tempo(2) # Temporisation 2s + tempo(2) # Temporisation 2s - # Fermeture - fermer() + # Fermeture + fermer() - scene.objects['Systeme']['thread_alive']=False # Tâche morte (thread) << NE PAS MODIFIER CETTE LIGNE >> - print ("Thread fermé") + print ("Thread #", len(threads)-1, "arrivé au bout -> fermeture.") # Tâche close (thread) << NE PAS MODIFIER CETTE LIGNE >> + scene.objects['Systeme']['thread_run']=False # Fin du cycle << NE PAS MODIFIER CETTE LIGNE >>