Suite de la migration

This commit is contained in:
Philippe Roy 2022-12-11 08:41:21 +01:00
parent 471b6e0246
commit 20dbda98a8
2 changed files with 0 additions and 199 deletions

View File

@ -1,52 +0,0 @@
import bge # Bibliothèque Blender Game Engine (UPBGE)
from porcou_lib import * # Bibliothèque portail coulissant
###############################################################################
# porcou_cmd.py
# @title: Commandes du portail coulissant
###############################################################################
###############################################################################
# Gestion des tâches (threads) << NE PAS MODIFIER CETTE SECTION >>
###############################################################################
threads=[]
scene = bge.logic.getCurrentScene()
def start():
thread_start(threads, commandes)
def stop():
thread_stop(threads)
###############################################################################
# Instructions élémentaires pour le portail coulissant
#
# 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)
# - 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 (absence d'obstacle) : ir_recep()
#
# Pupitre (valeur retournée = True ou False) :
# - Bouton poussoir coté rue : bp_ext()
# - Bouton poussoir coté cour : bp_int()
#
# Gestion du temps :
# - Temporisation en seconde : tempo(duree)
#
###############################################################################
def commandes():
# Coder vos commandes ici ...
gyr(True) # Activer le gyrophare
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 >>

View File

@ -1,147 +0,0 @@
import bge # Bibliothèque Blender Game Engine (UPBGE)
import threading # Multithreading
import trace
import sys
import time
###############################################################################
# porcou_lib.py
# @title: Bibliothèque utilisateur du portail coulissant (pcl_*)
# @project: Blender-EduTech
# @lang: fr
# @authors: Philippe Roy <philippe.roy@ac-grenoble.fr>
# @copyright: Copyright (C) 2020-2022 Philippe Roy
# @license: GNU GPL
#
# Ce simulateur est un environnement 3D programmable en Python.
# Il est destiné à la découverte de la programmation de système pluritechnique.
#
###############################################################################
# Récupérer l'objet portail coulissant
scene = bge.logic.getCurrentScene()
# print("Objets de la scene : ", scene.objects)
###############################################################################
# Méthode kill pour les tâches (threads)
###############################################################################
class thread_with_trace(threading.Thread):
def __init__(self, *args, **keywords):
threading.Thread.__init__(self, *args, **keywords)
self.killed = False
def start(self):
self.__run_backup = self.run
self.run = self.__run
threading.Thread.start(self)
def __run(self):
sys.settrace(self.globaltrace)
self.__run_backup()
self.run = self.__run_backup
def globaltrace(self, frame, event, arg):
if event == 'call':
return self.localtrace
else:
return None
def localtrace(self, frame, event, arg):
if self.killed:
if event == 'line':
raise SystemExit()
return self.localtrace
def kill(self):
self.killed = True
###############################################################################
# Start et stop des tâches (threads)
###############################################################################
def thread_start(threads, commandes):
threads.append(thread_with_trace(target = commandes))
threads[len(threads)-1].start()
scene.objects['Systeme']['thread_run']=True
scene.objects['Systeme']['thread_alive']=True
print ("Thread #", len(threads)-1, "ouvert.")
def thread_stop(threads):
i=0
zombie_flag=False
for t in threads:
if not t.is_alive():
print ("Thread #",i,"fermé.")
else:
print ("Thread #",i,"encore ouvert ...")
t.kill()
t.join()
if not t.is_alive():
print ("Thread #",i,"tué.")
else:
print ("Thread #",i,"zombie ...")
zombie_flag=True
i +=1
if zombie_flag==False:
scene.objects['Systeme']['thread_alive']=False
print ("Tous les threads sont fermés.")
else:
print ("Il reste des threads zombies.")
###############################################################################
# Actionneurs
###############################################################################
# Ordres utilisateur du clignotant
def gyr (ordre):
scene.objects['Module led']['actif']=ordre
# Ordres utilisateur du moteur
def mot_o (ordre):
scene.objects['Ensemble moteur']['actif_ouvrir']=ordre
def mot_f (ordre):
scene.objects['Ensemble moteur']['actif_fermer']=ordre
# Ordre utilisateur du capteur barrage IR
def ir_emet(ordre):
scene.objects['Module emetteur IR']['actif']=ordre
###############################################################################
# Capteurs
###############################################################################
# Compte-rendu utilisateur du capteur fin de course portail ouvert
def fc_o ():
return scene.objects['Capteur fdc ouvert']['actif']
# Compte-rendu utilisateur du capteur fin de course portail ouvert
def fc_f ():
return scene.objects['Capteur fdc ferme']['actif']
# Compte-rendu utilisateur du capteur barrage IR
def ir_recep ():
if scene.objects['Module recepteur IR']['actif'] :
return False
else:
return True
###############################################################################
# Boutons poussoirs
###############################################################################
# Compte-rendu utilisateur du bouton pousssoir coté rue
def bp_ext ():
return scene.objects['Module bouton cote rue']['actif']
# Compte-rendu utilisateur du bouton pousssoir coté cour
def bp_int ():
return scene.objects['Module bouton cote cour']['actif']
###############################################################################
# Temporisation
###############################################################################
def tempo (duree):
time.sleep(duree)