Génération de fichier de données CSV

This commit is contained in:
Philippe Roy 2023-01-20 18:31:51 +01:00
parent ddb3ffe0cc
commit e3f0f9dd1d
13 changed files with 191 additions and 53 deletions

View File

@ -51,7 +51,7 @@ def commandes():
# Monter
mot_digitset (500)
t0,z0, a0= get('t'), get('cabine_z'), get('mot_angle')
print ("Début monter : cabine_z : "+str(round(z0,3)) + " - mot_angle : " + str(round(a0,3)))
print ("Début monter : cabine_z : "+str(round(z0, 3)) + " - mot_angle : " + str(round(a0, 3)))
while pc_1() ==False :
voy_1(True)
mot_d(False)
@ -60,17 +60,17 @@ def commandes():
mot_m(False)
voy_1(False)
t1,z1, a1= get('t'), get('cabine_z'), get('mot_angle')
print ("Fin monter : cabine_z : "+str(round(z1,3)) + " - mot_angle : " + str(round(a1,3)))
print ("Fin monter : cabine_z : "+str(round(z1, 3)) + " - mot_angle : " + str(round(a1, 3)))
print ("")
print ("Monter : "+str(round(t1-t0,3)) +" s - distance : " +str(round(z1-z0,3))+" mm - angle : " +str(round(a1-a0,3))+
" rad - cabine_vitesse : " +str(round(cabine_vitesse,3))+" mm/s - moteur_vitesse : " +str(round(mot_vitesse,3))+
" rad/s - cabine_pas : " +str(round(cabine_pas,3))+" mm/impulsion - moteur_pas : " +str(round(mot_pas,3))+" rad/impulsion")
print ("Monter : "+str(round(t1-t0, 3)) +" s - distance : " +str(round(z1-z0, 3))+" mm - angle : " +str(round(a1-a0, 3))+
" rad - cabine_vitesse : " +str(round(cabine_vitesse, 3))+" mm/s - moteur_vitesse : " +str(round(mot_vitesse, 3))+
" rad/s - cabine_pas : " +str(round(cabine_pas, 3))+" mm/impulsion - moteur_pas : " +str(round(mot_pas, 3))+" rad/impulsion")
print ("")
# Descendre
mot_digitset () # 5 tr/s
t0,z0, a0= get('t'), get('cabine_z'), get('mot_angle')
print ("Début descendre : cabine_z : "+str(round(z0,3)) + " - mot_angle : " + str(round(a0,3)))
print ("Début descendre : cabine_z : "+str(round(z0, 3)) + " - mot_angle : " + str(round(a0, 3)))
while pc_0() ==False :
voy_0(True)
mot_m(False)
@ -79,11 +79,11 @@ def commandes():
mot_d(False)
voy_0(False)
t1,z1, a1= get('t'), get('cabine_z'), get('mot_angle')
print ("Fin descendre : cabine_z : "+str(round(z1,3)) + " - mot_angle : " + str(round(a1,3)))
print ("Fin descendre : cabine_z : "+str(round(z1, 3)) + " - mot_angle : " + str(round(a1, 3)))
print ("")
print ("Descendre : "+str(round(t1-t0,3)) +" s - distance : " +str(round(z1-z0,3))+" mm - angle : " +str(round(a1-a0,3))+
" rad - cabine_vitesse : " +str(round(cabine_vitesse,3))+" mm/s - moteur_vitesse : " +str(round(mot_vitesse,3))+
" rad/s - cabine_pas : " +str(round(cabine_pas,3))+" mm/impulsion - moteur_pas : " +str(round(mot_pas,3))+" rad/impulsion")
print ("Descendre : "+str(round(t1-t0, 3)) +" s - distance : " +str(round(z1-z0, 3))+" mm - angle : " +str(round(a1-a0, 3))+
" rad - cabine_vitesse : " +str(round(cabine_vitesse, 3))+" mm/s - moteur_vitesse : " +str(round(mot_vitesse, 3))+
" rad/s - cabine_pas : " +str(round(cabine_pas, 3))+" mm/impulsion - moteur_pas : " +str(round(mot_pas, 3))+" rad/impulsion")
fin() # A garder

Binary file not shown.

View File

@ -50,7 +50,7 @@ def commandes():
# Fermeture
mot_digitset (1256) # Vitesse par défaut 125,6 rad /s ( 20 tr / s )
t0,x0, a0= get('t'), get('portail_x'), get('mot_angle')
print ("Début fermeture : portail_x : "+str(round(x0,3)) + " - mot_angle : " + str(round(a0,3)))
print ("Début fermeture : portail_x : "+str(round(x0, 3)) + " - mot_angle : " + str(round(a0, 3)))
while fdc_f() ==False :
gyr(True)
mot_o(False)
@ -59,17 +59,17 @@ def commandes():
mot_f(False)
gyr(False)
t1,x1, a1= get('t'), get('portail_x'), get('mot_angle')
print ("Fin fermeture : portail_x : "+str(round(x1,3)) + " - mot_angle : " + str(round(a1,3)))
print ("Fin fermeture : portail_x : "+str(round(x1, 3)) + " - mot_angle : " + str(round(a1, 3)))
print ("")
print ("Fermeture : "+str(round(t1-t0,3)) +" s - distance : " +str(round(x1-x0,3))+" mm - angle : " +str(round(a1-a0,3))+
" rad - portail_vitesse : " +str(round(portail_vitesse,3))+" mm/s - moteur_vitesse : " +str(round(mot_vitesse,3))+
" rad/s - portail_pas : " +str(round(portail_pas,3))+" mm/impulsion - moteur_pas : " +str(round(mot_pas,3))+" rad/impulsion")
print ("Fermeture : "+str(round(t1-t0, 3)) +" s - distance : " +str(round(x1-x0, 3))+" mm - angle : " +str(round(a1-a0, 3))+
" rad - portail_vitesse : " +str(round(portail_vitesse, 3))+" mm/s - moteur_vitesse : " +str(round(mot_vitesse, 3))+
" rad/s - portail_pas : " +str(round(portail_pas, 3))+" mm/impulsion - moteur_pas : " +str(round(mot_pas, 3))+" rad/impulsion")
print ("")
# Ouverture
mot_digitset () # Vitesse par défaut 125,6 rad /s ( 20 tr / s )
t0,x0, a0= get('t'), get('portail_x'), get('mot_angle')
print ("Début ouverture : portail_x : "+str(round(x0,3)) + " - mot_angle : " + str(round(a0,3)))
print ("Début ouverture : portail_x : "+str(round(x0, 3)) + " - mot_angle : " + str(round(a0, 3)))
while fdc_o() ==False :
gyr(True)
mot_f(False)
@ -78,11 +78,11 @@ def commandes():
mot_o(False)
gyr(False)
t1,x1, a1= get('t'), get('portail_x'), get('mot_angle')
print ("Fin ouverture : portail_x : "+str(round(x1,3)) + " - mot_angle : " + str(round(a1,3)))
print ("Fin ouverture : portail_x : "+str(round(x1, 3)) + " - mot_angle : " + str(round(a1, 3)))
print ("")
print ("Ouverture : "+str(round(t1-t0,3)) +" s - distance : " +str(round(x1-x0,3))+" mm - angle : " +str(round(a1-a0,3))+
" rad - portail_vitesse : " +str(round(portail_vitesse,3))+" mm/s - moteur_vitesse : " +str(round(mot_vitesse,3))+
" rad/s - portail_pas : " +str(round(portail_pas,3))+" mm/impulsion - moteur_pas : " +str(round(mot_pas,3))+" rad/impulsion")
print ("Ouverture : "+str(round(t1-t0, 3)) +" s - distance : " +str(round(x1-x0, 3))+" mm - angle : " +str(round(a1-a0, 3))+
" rad - portail_vitesse : " +str(round(portail_vitesse, 3))+" mm/s - moteur_vitesse : " +str(round(mot_vitesse, 3))+
" rad/s - portail_pas : " +str(round(portail_pas, 3))+" mm/impulsion - moteur_pas : " +str(round(mot_pas, 3))+" rad/impulsion")
fin() # A garder

View File

@ -1,7 +1,7 @@
<data>
<screen>
<width>1568</width>
<height>882</height>
<width>1590</width>
<height>895</height>
<quality>1</quality>
</screen>
</data>

View File

@ -36,7 +36,7 @@ ACTIVATE = bge.logic.KX_INPUT_ACTIVE
card_description ={}
# Documentation du sytème
system=importlib.import_module(scene.objects['Doc']['system']+'_doc') # Système
system=importlib.import_module(scene.objects['System']['system']+'_doc') # Système
system_card = system.get_system_card()
card_description.update(system.get_system_card_description())

View File

@ -4,6 +4,7 @@ import sys
import importlib
import subprocess # Multiprocessus
import time
import csv
###############################################################################
# twin_plot.py
@ -19,9 +20,12 @@ import time
scene = bge.logic.getCurrentScene()
# Récupérer la configuration du graphique
system=importlib.import_module(scene.objects['Doc']['system']) # Système
system=importlib.import_module(scene.objects['System']['system']) # Système
plot_config = system.get_public_vars()
# CSV
csv_data=[]
###############################################################################
# Accès aux variables publiques du système
###############################################################################
@ -36,6 +40,46 @@ def get(data):
print ("Erreur sur l'accès aux variables par get("+data+"), la variable '"+data+"' absente du système.")
return None
###############################################################################
# Rapport CSV
###############################################################################
# Démarage et configuration des variables
def csv_start(data):
print ("Acquisition des données CSV")
scene.objects['System']['csv_var'] =[]
data_line = ['t']
for var in data:
scene.objects['System']['csv_var'].append([plot_config[var][0][0], plot_config[var][0][1]])
data_line.append(var)
print (scene.objects['System']['csv_var'])
csv_data.append(data_line)
scene.objects['System']['csv']=True
# Ajout des données (fps = 60)
def csv_maj(cont):
data_line = [round(scene.objects['System']['time'], 3)]
for var in scene.objects['System']['csv_var']:
data_line.append(round(scene.objects[var[0]][var[1]], 3))
csv_data.append(data_line)
# Génération du fichier
def localize_floats(row):
return [
str(el).replace('.', ',') if isinstance(el, float) else el
for el in row
]
def csv_generate():
fichier_csv=scene.objects['System']['system']+'.csv'
print ("Génération du fichier :", fichier_csv)
scene.objects['Cmd-text']['Text']= "Génération du fichier :", fichier_csv
scene.objects['System']['csv']=False
with open(fichier_csv, 'w') as csvfile:
writer = csv.writer(csvfile, delimiter = ';', lineterminator = '\n')
for t_data in csv_data:
writer.writerow(localize_floats(t_data))
###############################################################################
# Création du graphique
###############################################################################

View File

@ -21,7 +21,7 @@ from serial.tools.list_ports import comports # Détection du port automatique
scene = bge.logic.getCurrentScene()
# Récupérer le brochage du jumeau réel
system=importlib.import_module(scene.objects['Doc']['system']) # Système
system=importlib.import_module(scene.objects['System']['system']) # Système
pin_config = system.get_public_vars()
###############################################################################
@ -95,7 +95,7 @@ def serial_open():
# Mise en place de la carte
speed = 57600
[device,board_name] =autoget_port() # Recherche automatique du port
[device, board_name] =autoget_port() # Recherche automatique du port
if device is None:
scene.objects['System']['twins'] = False
scene.objects['Twins-text']['Text'] = "Aucune connection disponible : jumeau réel débranché."
@ -106,10 +106,6 @@ def serial_open():
scene.objects['Twins-text']['Text'] = "Aucune connection disponible : port "+device+" pas prêt."
return False
scene.objects['System']['twins'] = True
# scene.objects['System']['twins_close'] = False
scene.objects['System']['twins_port'] = device
scene.objects['System']['twins_speed'] = speed
# scene.objects['System']['twins_readline'] = ""
board_it = pyfirmata.util.Iterator(board) # Itérateur pour les entrées
board_it.start()

Binary file not shown.

View File

@ -26,8 +26,8 @@ scene = bge.logic.getCurrentScene()
# Dans ce cas, il n'y a pas configuration de broche car elle est présente sur la variable 'nom_variable'.
# Ce distinguo ne concerne que les entrées, les sorties réelles sont forcées par les sorties numériques et vice-versa.
# Configuration du brochage du jumeau réel
public_vars = {
't' : [['System','time'], [], []],
'fdc_h' : [['Microrupteur haut','activated'], ['pin', 'd','i'], []],
'fdc_h_r' : [['Microrupteur haut','activated_real'], [], []],
'fdc_b' : [['Microrupteur bas','activated'], ['pin', 'd','i'], []],
@ -40,6 +40,9 @@ public_vars = {
'bp_a_r' : [['Bp arret','activated_real'], [], []],
'mot_m' : [['Moteur','up'], ['pin_up', 'd','o'], []],
'mot_d' : [['Moteur','down'], ['pin_down', 'd','o'], []],
'mot_angle' : [['Moteur','alpha'], [], []],
'mot_vitesse' : [['Moteur','speed'], [], []],
'mot_pas' : [['Moteur','step'], [], []],
'bp_auto' : [['Bp auto','activated'], ['pin', 'd','i'], []],
'bp_auto_r' : [['Bp auto','activated_real'], [], []],
'voy_auto' : [['Led auto','activated'], ['pin', 'd','o'], []],
@ -116,6 +119,13 @@ def mot (cont):
# Monter
if obj['up']:
# Physique (sens horaire -> négatif)
obj['step'] = abs(scene.objects['Axe enrouleur'].worldOrientation.to_euler().x - scene.objects['Axe enrouleur']['last_alpha'])
obj['alpha']=obj['last_alpha'] - obj['step']
if scene.objects['System']['time'] != obj['last_time']:
obj['speed']= -obj['step']/(scene.objects['System']['time']-obj['last_time'])
# print (obj['speed'], obj['step'],scene.objects['System']['time']-obj['last_time'], scene.objects['System']['time'], obj['last_time'])
# Animation
if obj['frame_down']<105: # Volet pas cassé
if obj['frame_up'] <0: # Réinit entre 0 et -4
@ -128,7 +138,7 @@ def mot (cont):
mode = bge.logic.KX_ACTION_MODE_PLAY
layerWeight = 0.0
ipoFlags = 0
speed = 0.4
speed = 0.4 # FIXME
scene.objects['Axe enrouleur'].playAction('Axe enrouleur-Up', start, 135, layer, priority, blendin, mode, layerWeight, ipoFlags, speed)
scene.objects['Axe fdc'].playAction('Axe fdc-Up', start, 135, layer, priority, blendin, mode, layerWeight, ipoFlags, speed)
scene.objects['Lame volet 1'].playAction('Lame volet 1-Up', start, end, layer, priority, blendin, mode, layerWeight, ipoFlags, speed)
@ -162,7 +172,7 @@ def mot (cont):
mode = bge.logic.KX_ACTION_MODE_PLAY
layerWeight = 0.0
ipoFlags = 0
speed = 0.4
speed = 0.4 # FIXME
scene.objects['Axe enrouleur'].playAction('Axe enrouleur-Up', start, end, layer, priority, blendin, mode, layerWeight, ipoFlags, speed)
# scene.objects['Axe fdc'].playAction('Axe fdc-Up', start, end, layer, priority, blendin, mode, layerWeight, ipoFlags, speed)
scene.objects['Lame volet 1'].playAction('Lame volet 1-Up', start, end, layer, priority, blendin, mode, layerWeight, ipoFlags, speed)
@ -181,6 +191,11 @@ def mot (cont):
obj['frame_up'] = scene.objects['Axe enrouleur'].getActionFrame(layer)
obj['frame_down']= 100-obj['frame_up']
# Physique après mouvement (last_*)
scene.objects['Axe enrouleur']['last_alpha'] = scene.objects['Axe enrouleur'].worldOrientation.to_euler().x
obj['last_time'] = scene.objects['System']['time']
obj['last_alpha'] = obj['alpha']
# Modele 3D -> Arduino
if scene.objects['System']['twins']:
if scene.objects['Moteur']['pin_m'] is not None:
@ -191,6 +206,14 @@ def mot (cont):
# Descendre
if obj['down']:
# Physique (sens trigo -> positif)
obj['step'] = abs(scene.objects['Axe enrouleur'].worldOrientation.to_euler().x - scene.objects['Axe enrouleur']['last_alpha'])
obj['alpha']=obj['last_alpha'] + obj['step']
if scene.objects['System']['time'] != obj['last_time']:
obj['speed']= obj['step']/(scene.objects['System']['time']-obj['last_time'])
# print (round(obj['last_alpha'], 3), round(obj['step'], 3), round(obj['alpha'], 3), round(obj['speed'], 3),
# round(scene.objects['Axe enrouleur']['last_alpha'],3), round(scene.objects['Axe enrouleur'].worldOrientation.to_euler().x,3))
# Animation
if obj['frame_up']<105: # Volet pas cassé
if obj['frame_down'] <0: # Réinit entre 0 et -4
@ -204,7 +227,7 @@ def mot (cont):
mode = bge.logic.KX_ACTION_MODE_PLAY
layerWeight = 0.0
ipoFlags = 0
speed = 0.4
speed = 0.4 # FIXME
scene.objects['Axe enrouleur'].playAction('Axe enrouleur-Down', start, end, layer, priority, blendin, mode, layerWeight, ipoFlags, speed)
scene.objects['Axe fdc'].playAction('Axe fdc-Down', start, end, layer, priority, blendin, mode, layerWeight, ipoFlags, speed)
scene.objects['Lame volet 1'].playAction('Lame volet 1-Down', start, end, layer, priority, blendin, mode, layerWeight, ipoFlags, speed)
@ -237,7 +260,7 @@ def mot (cont):
scene.objects['Lame volet 11'].stopAction(layer)
scene.objects['Lame volet 12'].stopAction(layer)
scene.objects['Lame volet 13'].stopAction(layer)
vitesse = 0.03
vitesse = 0.03 # FIXME
# vitesse = 0.015
pas_axe_enrouleur = 0.5
pas_axe_fdc = 0.5/3
@ -260,6 +283,11 @@ def mot (cont):
obj['frame_down'] +=1
obj['frame_up']= 100-obj['frame_down']
# Physique après mouvement (last_*)
scene.objects['Axe enrouleur']['last_alpha'] = scene.objects['Axe enrouleur'].worldOrientation.to_euler().x
obj['last_time'] = scene.objects['System']['time']
obj['last_alpha'] = obj['alpha']
# Modele 3D -> Arduino
if scene.objects['System']['twins']:
if scene.objects['Moteur']['pin_d'] is not None:
@ -270,6 +298,12 @@ def mot (cont):
# Arrêt
if obj['up'] == False and obj['down'] == False:
# Physique
obj['speed']= 0
scene.objects['Axe enrouleur']['last_alpha'] = scene.objects['Axe enrouleur'].worldOrientation.to_euler().x
obj['last_time'] = scene.objects['System']['time']
obj['last_alpha'] = obj['alpha']
# Animation
if scene.objects['Axe enrouleur'].isPlayingAction(layer):
scene.objects['Axe enrouleur'].stopAction(layer)
@ -434,4 +468,10 @@ def system_reset ():
scene.objects['Microrupteur bas']['activated_real']=False
scene.objects['Moteur']['up']=False
scene.objects['Moteur']['down']=False
scene.objects['Moteur']['alpha']=0
scene.objects['Moteur']['last_alpha']=0
scene.objects['Moteur']['speed']=0
scene.objects['Moteur']['speed_setting']=125.6 # Vitesse du moteur numérique : 125.6 rad /s ( 20 tr / s )
scene.objects['Moteur']['step']=0
scene.objects['Axe enrouleur']['last_alpha']=scene.objects['Axe enrouleur'].worldOrientation.to_euler().x
scene.objects['Recepteur LDR']['activated']=False

View File

@ -40,15 +40,51 @@ from volrou_lib import * # Bibliothèque utilisateur du volet roulant
###############################################################################
def commandes():
csv_start(['mot_angle'])
# Ecrire votre code ici ...
while True:
voy_auto(True)
tempo(0.5)
voy_auto(False)
tempo(0.5)
pass
# Init -> Descendre
while fdc_b() ==False :
mot_m(False)
mot_d(True)
mot_d(False)
print ("")
# Monter
mot_digitset (500)
t0, a0= get('t'), get('mot_angle')
print ("Début monter : mot_angle : " + str(round(a0, 3)))
while fdc_h() ==False :
mot_d(False)
mot_m(True)
mot_angle, mot_pas, mot_vitesse = get('mot_angle'), get('mot_pas'), get('mot_vitesse')
# if abs(mot_vitesse)>0:
# print ("Monter : mot_angle : "+ str(round(mot_angle, 3)) + " rad - mot_vitesse : "+ str(round(mot_vitesse, 3)) + " rad/s - moteur_pas : " +str(round(mot_pas, 3))+" rad/impulsion")
mot_m(False)
t1, a1= get('t'), get('mot_angle')
print ("Fin monter : mot_angle : " + str(round(a1, 3)))
print ("")
print ("Monter : "+str(round(t1-t0, 3)) +" s - angle : " +str(round(a1-a0, 3)) + " rad - moteur_vitesse : " +str(round(mot_vitesse, 3))+
" rad/s - moteur_pas : " +str(round(mot_pas, 3))+" rad/impulsion")
print ("")
# Descendre
mot_digitset () # 20 tr/s
t0, a0= get('t'), get('mot_angle')
print ("Début descendre : mot_angle : " + str(round(a0, 3)))
while fdc_b() ==False :
mot_m(False)
mot_d(True)
mot_angle, mot_pas, mot_vitesse = get('mot_angle'), get('mot_pas'), get('mot_vitesse')
# if abs(mot_vitesse)>0:
# print ("Monter : mot_angle : "+ str(round(mot_angle, 3)) + " rad - mot_vitesse : "+ str(round(mot_vitesse, 3)) + " rad/s - moteur_pas : " +str(round(mot_pas, 3))+" rad/impulsion")
mot_d(False)
t1, a1= get('t'), get('mot_angle')
print ("Fin descendre : mot_angle : " + str(round(a1, 3)))
print ("")
print ("Descendre : "+str(round(t1-t0, 3)) +" s - angle : " +str(round(a1-a0, 3)) + " rad - moteur_vitesse : " +str(round(mot_vitesse, 3))+
" rad/s - moteur_pas : " +str(round(mot_pas, 3))+" rad/impulsion")
fin() # A garder

View File

@ -45,7 +45,7 @@ card_data_title="Accès aux données"
card_data_text=""" get(variable) \n -> Retourne la valeur de la variable à \n l'instant t. Par exemple : val = get('bp_m').\n
Entrées/sorties : 'bp_m', 'bp_a', 'bp_d', \n 'mot_m', 'mot_d', 'fdc_h', 'fdc_b', 'bp_auto', \n 'voy_auto', 'lum'.\n
Variables réels (si il y a jumelage) : 'bp_m_r', \n 'bp_a_r', 'bp_d_r', 'fdc_h_r', 'fdc_b_r', \n 'bp_auto_r', 'lum_r'.\n
Autres variables : 't' (temps), 'mot_angle', 'mot_vitesse'."""
Autres : 't' (temps), 'mot_angle', 'mot_vitesse'."""
card_data_url=[]
system_card_description.update({"data-card" : [card_data_title, card_data_text, card_data_url]})
@ -62,10 +62,11 @@ system_card_description.update({"plot-card" : [card_plot_title, card_plot_text,
# Ouvrir et fermer
card_movement_title="Monter et descendre"
card_movement_text=""" mot_m(True | False) \n -> Monter le volet (moteur sens trigo). \n
card_movement_text=""" mot_m(True | False) \n -> Monter le volet (moteur sens trigo).
mot_d(True | False) \n -> Descendre le volet (sens horaire). \n
fdc_h() \n -> Capteur fin de course volet en haut.\n Retourne True si volet est en haut. \n
fdc_b() \n -> Capteur fin de course volet en bas.\n Retourne True si le volet est en bas."""
fdc_h() \n -> Capteur fin de course volet en haut.
fdc_b() \n -> Capteur fin de course volet en bas.\n
mot_digitset(vitesse) -> Change la vitesse \n du moteur numérique en rad/s. Si 'vitesse' \n est ommis, elle sera réinitialisée."""
card_movement_url=[]
system_card_description.update({"movement-card" : [card_movement_title, card_movement_text, card_movement_url]})

View File

@ -1,7 +1,7 @@
import bge # Bibliothèque Blender Game Engine (UPBGE)
from twin_threading import thread_cmd_start, thread_cmd_stop, thread_cmd_end # Multithreading
from twin_serial import jumeau, jumeau_stop, serial_close # Liaison série
from twin_plot import plot, get # Visualisation des données
from twin_plot import get, csv_start, csv_generate, plot # Visualisation des données
import time
###############################################################################
@ -43,6 +43,13 @@ def mot_m (order):
def mot_d (order):
scene.objects['Moteur']['down']=order
# Réglage de la vitesse du moteur numérique
def mot_digitset (speed=None):
if speed==None:
scene.objects['Moteur']['speed_setting']=125.6 # Vitesse du moteur numérique : 125.6 rad /s ( 20 tr / s )
else:
scene.objects['Moteur']['speed_setting']=speed
###############################################################################
# Capteurs
###############################################################################
@ -109,7 +116,8 @@ def truncate(n, decimals=0):
return int(n* multiplier)/multiplier
def get_t ():
return truncate(scene.objects['System']['time'], 3)
# return truncate(scene.objects['System']['time'], 3)
return round(scene.objects['System']['time'], 3)
def set_t (date):
scene.objects['System']['time']=date
@ -119,19 +127,32 @@ def reset_t ():
# Arrêt
def stop():
# Jumeau
if scene.objects['System']['twins']:
serial_close(scene.objects['System']['board'])
time.sleep(1)
scene.objects['System']['plot_draw']=False
thread_cmd_stop()
# Suivi de données
if scene.objects['System']['csv']:
csv_generate()
scene.objects['System']['plot_draw']=False # Plot
thread_cmd_stop() # Thread
# Fin naturelle
def end():
# Jumeau
if scene.objects['System']['twins']:
serial_close(scene.objects['System']['board'])
time.sleep(1)
scene.objects['System']['plot_draw']=False
thread_cmd_end()
# Suivi de données
if scene.objects['System']['csv']:
csv_generate()
scene.objects['System']['plot_draw']=False # Plot
thread_cmd_end() # Thread
def fin():
end()