Ajout de la variante 2 pour le volet roulant

This commit is contained in:
Philippe Roy 2023-02-11 23:52:07 +01:00
parent 01e37f5ce7
commit 0c6e1a3cf3
6 changed files with 135 additions and 17 deletions

88
twin.py
View File

@ -53,7 +53,6 @@ color_blue_dark = (0.004, 0.054, 0.296, 1) # Couleur Blue (Actionneur type moteu
color_grey = (0.285, 0.285, 0.285, 1) # Couleur Blue (Actionneur type moteur)
color_led_yellow = (0.799, 0.617, 0.021, 1) # Couleur Led Jaune
# Constantes
JUST_ACTIVATED = bge.logic.KX_INPUT_JUST_ACTIVATED
JUST_RELEASED = bge.logic.KX_INPUT_JUST_RELEASED
@ -159,8 +158,14 @@ def cmd_init():
scene.objects['Script-text']['Text']=scene.objects['System']['script']
scene.objects['Twins-text']['Text']="Connection fermée."
# Mise en place de la variante
# scene.objects['System']['variant'] = int(twin_config[0][2].text)
# scene.active_camera = scene.objects["Camera"]
# scene.objects['Sun'].setVisible(True,True)
# scene.addOverlayCollection(scene.cameras['Camera-Hud'], bpy.data.collections['Hud'])
# Windows
windows=("Doc", "Doc_chap-general", "Doc_chap-system", "Doc_chap-python", "About")
windows=("Doc", "Doc_chap-general", "Doc_chap-system", "Doc_chap-python", "About", "Credits")
for window in windows:
scene.objects[window].setVisible(False,True)
@ -311,10 +316,10 @@ def manip_init():
scene.objects['Sun'].setVisible(True,True)
scene.addOverlayCollection(scene.cameras['Camera-Hud'], bpy.data.collections['Hud'])
# Fenêtres
scene.objects['About'].setVisible(False,True)
scene.objects['Credits'].setVisible(False,True)
scene.objects['Doc'].setVisible(False,True)
# # Fenêtres
# scene.objects['About'].setVisible(False,True)
# scene.objects['Credits'].setVisible(False,True)
# scene.objects['Doc'].setVisible(False,True)
# Mémorisation de la position de la caméra
scene.objects['Camera']['init_lx']=scene.objects['Camera'].worldPosition.x
@ -479,7 +484,7 @@ def file_open():
else: # Qt5 ne s'installe pas bien sur Windows -> wxPython
scene.objects['System']['file_proc'] = subprocess.Popen([sys.executable, os.path.join(os.getcwd(), "twin_file_wx.py")], stdout=subprocess.PIPE, encoding = 'utf8')
# Récupérer le nom du fchier
# Récupérer le nom du fchier
stout = scene.objects['System']['file_proc'].communicate()
if stout[0][:-1] != 'None' and len(stout[0][:-1])>0 :
scene.objects['System']['script'] = stout[0][:-1]
@ -595,7 +600,7 @@ def cycle_hl(cont):
if cont.sensors['MO'].status == JUST_ACTIVATED:
obj['mo'] = True
# Composant avec un goupe de couleur (type actionneur)
# Composant avec un groupe de couleur
if "color_group" in obj.getPropertyNames():
for obj_name in obj['color_group']:
scene.objects[obj_name].color = color_hl
@ -618,7 +623,7 @@ def cycle_hl(cont):
obj.color = color_passive
return
# Composant avec un goupe de couleur (type actionneur)
# Composant avec un groupe de couleur
if "color_group" in obj.getPropertyNames():
for obj_name in obj['color_group']:
cycle_actuator_color(obj_name)
@ -657,6 +662,50 @@ def cycle_click(cont):
else:
obj.color = color_active
##
# Click sur les éléments comutables du système (activation numérique)
##
def cycle_switch(cont):
obj = cont.owner
obj_on=scene.objects[obj.name+"-on"]
if scene.objects['System']['run'] ==False:
return
# Passif
if "active" in obj.getPropertyNames():
if obj['active'] == False:
obj.color = color_passive
return
# Activation
if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive and scene.objects['System']['manip_mode']==0 and obj['prior']:
if obj['activated']: # On -> Off
obj.color = color_hl
obj['activated'] = False
obj['click'] = True
obj.setVisible(True,False)
obj_on.setVisible(False,False)
else: # Off -> On
obj_on.color = color_activated
obj['activated'] = True
obj['click'] = True
obj_on.setVisible(True,False)
obj.setVisible(False,False)
# Désactivation
if cont.sensors['Click'].status == JUST_RELEASED and obj['prior']:
obj['click'] = False
if cont.sensors['MO'].positive:
obj.color = color_hl
else:
if obj['activated']:
obj_on.color = color_activated
else:
obj.color = color_active
##
# Couleurs sur les éléments sensibles du système
##
@ -703,7 +752,7 @@ def cycle_actuator_color(name):
obj.color = color_led_yellow
##
# Comportement standard des boutons
# Comportement standard des boutons poussoirs
##
def cycle_bp(cont):
@ -720,6 +769,25 @@ def cycle_bp(cont):
# Couleurs
cycle_sensitive_color(obj)
##
# Comportement standard des boutons à glissière
##
def cycle_bg(cont):
obj = cont.owner
# Arduino -> Modele 3D
if scene.objects['System']['twins'] and obj['prior_real']:
if obj['pin'] is not None :
if obj['pin'].read()==True and obj['activated_real'] == False :
obj['activated_real'] = True
if obj['pin'].read()==False and obj['activated_real'] == True :
obj['activated_real'] = False
# Couleurs
# FIXME à verifier
cycle_sensitive_color(obj)
##
# Comportement standard des voyants
##

View File

@ -1,7 +1,7 @@
<data>
<screen>
<width>1609</width>
<height>905</height>
<width>1590</width>
<height>895</height>
<quality>1</quality>
</screen>
<plot>

Binary file not shown.

View File

@ -46,6 +46,8 @@ public_vars = {
'mot_pas' : [['Moteur','step','a'], [], []],
'bp_auto' : [['Bp auto','activated','d'], ['pin', 'd','i'], []],
'bp_auto_r' : [['Bp auto','activated_real','d'], [], []],
'bg_auto' : [['Bg auto','activated','d'], ['pin', 'd','i'], []],
'bg_auto_r' : [['Bg auto','activated_real','d'], [], []],
'voy_auto' : [['Led auto','activated','d'], ['pin', 'd','o'], []],
'lum' : [['Recepteur LDR','activated','a'], ['pin', 'd','i'], []], # FIXME : Basculer en analogique
'lum_r' : [['Recepteur LDR','activated_real','a'], [], []]}
@ -89,12 +91,16 @@ def init(cont):
["Moteur vis1","grey"],
["Moteur vis2","grey"]], "Moteur : mot_m(True | False), mot_d(True | False)")
twin.cycle_def_focusgroup([["Led auto", "led_yellow"]], "Voyant témoin mode automatique : voy_auto(True | False)")
# twin.cycle_def_focusgroup([["Bg auto", "color_active"],
# ["Bg auto-on", "color_active"]], "Voyant témoin mode automatique : voy_auto(True | False)")
# Description des composants sensibles
scene.objects['Bp monter']['description']="Bouton poussoir monter volet : bp_m()"
scene.objects['Bp descendre']['description']="Bouton poussoir descendre volet : bp_d()"
scene.objects['Bp arret']['description']="Bouton poussoir arrêt volet : bp_a()"
scene.objects['Bp auto']['description']="Bouton poussoir mode automatique : bp_auto()"
scene.objects['Bg auto']['description']="Bouton à glissière mode automatique : bg_auto()"
scene.objects['Bg auto-on']['description']="Bouton à glissière mode automatique : bg_auto()"
scene.objects['Microrupteur haut']['description']="Capteur fin de course volet en haut : fdc_h()"
scene.objects['Microrupteur bas']['description']="Capteur fin de course volet en bas : fdc_b()"
scene.objects['Recepteur LDR']['description']="Capteur de luminosité (LDR) : lum()"
@ -427,10 +433,11 @@ def system_init ():
def system_reset ():
# Entrées à l'état initial
objs= ['Bp monter', 'Bp arret', 'Bp descendre', 'Bp auto', 'Microrupteur haut','Microrupteur bas', 'Recepteur LDR']
objs= ['Bp monter', 'Bp arret', 'Bp descendre', 'Bp auto', 'Bg auto', 'Microrupteur haut','Microrupteur bas', 'Recepteur LDR']
for obj in objs:
scene.objects[obj]['activated']=False
scene.objects[obj]['activated_real']=False
scene.objects['Bg auto-on'].setVisible(False,False)
# Voyants aux états initiaux
scene.objects['Led auto']['activated']=False
@ -475,7 +482,7 @@ def system_reset ():
obj['frame_down']= 100-obj['frame_up']
# Priorités activées
objs= ['Bp monter', 'Bp arret', 'Bp descendre', 'Bp auto', 'Microrupteur haut','Microrupteur bas', 'Recepteur LDR',
objs= ['Bp monter', 'Bp arret', 'Bp descendre', 'Bp auto', 'Bg auto', 'Microrupteur haut','Microrupteur bas', 'Recepteur LDR',
'Moteur', 'Led auto']
for obj in objs:
scene.objects[obj]['prior']=True

View File

@ -1,4 +1,5 @@
from volrou_lib import * # Bibliothèque utilisateur du volet roulant
volrou_variante(2) # Variante 2 de la maquette 3D du volet roulant
###############################################################################
# volrou_cmd.py
@ -21,7 +22,8 @@ from volrou_lib import * # Bibliothèque utilisateur du volet roulant
# - Bouton poussoir monter volet : bp_m()
# - Bouton poussoir arrêt volet : bp_a()
# - Bouton poussoir descendre volet : bp_d()
# - Bouton poussoir mode automatique : bp_auto()
# - Bouton poussoir mode automatique : bp_auto() (variante 1)
# - Bouton à glissière mode automatique : bg_auto() (variante 2)
#
# Retour d'information du pupitre (allumer = True ou False) :
# - Voyant témoin mode automatique : voy_auto(True | False)
@ -41,6 +43,15 @@ from volrou_lib import * # Bibliothèque utilisateur du volet roulant
def commandes():
daq(['bg_auto', 'voy_auto'])
plot (['bg_auto', 'voy_auto'])
while True:
if bg_auto():
voy_auto(True) # Activer le voyant du mode automatique
else:
voy_auto(False)
daq(['mot_angle', 'mot_vitesse'])
plot (['mot_angle', 'mot_vitesse'])
# plot ([['mot_angle', 'mot_vitesse']])

View File

@ -98,19 +98,25 @@ def bp_d ():
return True
return False
# Compte-rendu du bouton mode automatique
# Compte-rendu du bouton poussoir mode automatique
def bp_auto ():
if scene.objects['Bp auto']['activated'] or scene.objects['Bp auto']['activated_real']:
return True
return False
# Compte-rendu du bouton à glissière mode automatique
def bg_auto ():
if scene.objects['Bg auto']['activated'] or scene.objects['Bg auto']['activated_real']:
return True
return False
###############################################################################
# Jumelage
###############################################################################
# Mode de jumelage (règles d'activation)
def jumeau_mode (input_real=True, input_digital=True, output_real=True, output_digital=True):
input_objs = ['Bp monter', 'Bp arret', 'Bp descendre', 'Bp auto', 'Microrupteur haut', 'Microrupteur bas', 'Recepteur LDR']
input_objs = ['Bp monter', 'Bp arret', 'Bp descendre', 'Bp auto', 'Bg auto', 'Microrupteur haut', 'Microrupteur bas', 'Recepteur LDR']
output_objs = ['Moteur', 'Led auto']
jumeau_mode_system (input_objs, output_objs, input_real, input_digital, output_real, output_digital)
@ -146,6 +152,32 @@ def reset_t ():
def start(fct):
twin_threading.start(threads_cmd, "commands", fct)
##
# Variante
#
# Variante 1 : Le mode automatique s'active avec le bouton poussoir bp_auto et se désactive avec l'appui sur bp_m, bp_a ou bp_d.
# Variante 2 : Le mode automatique s'active avec le bouton à glissière bg_auto.
#
# La variante 1 correspond à la maquette réelle de 4A technologie.
#
# Configuration des variantes du modèle 3D -> variant_dict :
# 'nom de l'objet 3D' : liste des variantes où l'objet est présent.
# Par défaut les objets sont présents quelque soit la variante sélectionnée.
##
def volrou_variante(variant):
if variant != scene.objects['System']['variant']:
print ("Variante de la maquette numérique:", variant)
scene.objects['System']['variant']=variant
variant_dict = {'Bp auto':[1], 'Bg auto':[2], 'Bg auto-on':[2]}
variant_list = list(variant_dict)
for name in variant_list:
if variant in variant_dict[name]:
pass
else:
scene.objects[name].setVisible(False,True)
scene.objects[name].suspendPhysics()
##
# Arrêt
##