mirror of
https://forge.apps.education.fr/blender-edutech/jumeaux-numeriques.git
synced 2024-01-27 06:56:18 +01:00
Bugfix : génération de plot unique, légende ou titre d'axe y en fonction du nombre de courbe
This commit is contained in:
parent
370179d501
commit
e887d1d8e9
@ -39,6 +39,8 @@ from montchg_lib import * # Bibliothèque utilisateur du monte-charge
|
||||
|
||||
def commandes():
|
||||
|
||||
daq(['mot_angle', 'mot_vitesse', 'cabine_z', 'cabine_vitesse'])
|
||||
|
||||
# Init -> Descendre
|
||||
while pc_0() ==False :
|
||||
voy_0(True)
|
||||
@ -48,49 +50,51 @@ def commandes():
|
||||
voy_0(False)
|
||||
print ("")
|
||||
|
||||
daq(['mot_angle', 'mot_vitesse', 'cabine_z', 'cabine_vitesse'])
|
||||
# daq(['mot_angle', 'mot_vitesse', 'cabine_z', 'cabine_vitesse'])
|
||||
|
||||
# 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)))
|
||||
while pc_1() ==False :
|
||||
voy_1(True)
|
||||
mot_d(False)
|
||||
mot_m(True)
|
||||
mot_pas, mot_vitesse, cabine_pas, cabine_vitesse= get('mot_pas'), get('mot_vitesse'), get('cabine_pas'), get('cabine_vitesse')
|
||||
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 ("")
|
||||
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
|
||||
# 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)))
|
||||
# while pc_1() ==False :
|
||||
# voy_1(True)
|
||||
# mot_d(False)
|
||||
# mot_m(True)
|
||||
# mot_pas, mot_vitesse, cabine_pas, cabine_vitesse= get('mot_pas'), get('mot_vitesse'), get('cabine_pas'), get('cabine_vitesse')
|
||||
# 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 ("")
|
||||
# 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)))
|
||||
while pc_0() ==False :
|
||||
voy_0(True)
|
||||
mot_m(False)
|
||||
mot_d(True)
|
||||
mot_pas, mot_vitesse, cabine_pas, cabine_vitesse= get('mot_pas'), get('mot_vitesse'), get('cabine_pas'), get('cabine_vitesse')
|
||||
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 ("")
|
||||
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")
|
||||
# # 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)))
|
||||
# while pc_0() ==False :
|
||||
# voy_0(True)
|
||||
# mot_m(False)
|
||||
# mot_d(True)
|
||||
# mot_pas, mot_vitesse, cabine_pas, cabine_vitesse= get('mot_pas'), get('mot_vitesse'), get('cabine_pas'), get('cabine_vitesse')
|
||||
# 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 ("")
|
||||
# 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")
|
||||
|
||||
plot(['mot_angle', 'mot_vitesse', 'cabine_z', 'cabine_vitesse'])
|
||||
# plot(['mot_angle', 'mot_vitesse', ['cabine_z', 'cabine_vitesse']])
|
||||
# plot([['mot_angle', 'mot_vitesse']])
|
||||
plot(['mot_angle', 'mot_vitesse'])
|
||||
# plot(['mot_angle'])
|
||||
fin() # A garder
|
||||
|
||||
|
||||
###############################################################################
|
||||
# En: External call << DONT CHANGE THIS SECTION >>
|
||||
# Fr: Appel externe << NE PAS MODIFIER CETTE SECTION >>
|
||||
|
Binary file not shown.
Binary file not shown.
34
twin_daq.py
34
twin_daq.py
@ -25,7 +25,7 @@ scene = bge.logic.getCurrentScene()
|
||||
system=importlib.import_module(scene.objects['System']['system']) # Système
|
||||
daq_config = system.get_public_vars()
|
||||
|
||||
# CSV
|
||||
# Données de l'acquisition
|
||||
daq_data=[]
|
||||
|
||||
###############################################################################
|
||||
@ -62,7 +62,7 @@ def daq(data):
|
||||
scene.objects['System']['daq']=True
|
||||
|
||||
##
|
||||
# Ajout des données (fps = 60)
|
||||
# Ajout des données (lecture/s = fps = 60)
|
||||
##
|
||||
|
||||
def daq_add(cont):
|
||||
@ -115,6 +115,8 @@ def plot_config_generate(data_groups):
|
||||
for var in daq_config_list:
|
||||
xml_var = ET.SubElement(xml_plot, 'var')
|
||||
xml_var.text=var
|
||||
|
||||
# Configuration graphique de ma série de donnée
|
||||
if len(daq_config[var][2]) >=4:
|
||||
xml_mark = ET.SubElement(xml_var, 'marker')
|
||||
xml_mark.text=daq_config[var][2][0]
|
||||
@ -125,19 +127,19 @@ def plot_config_generate(data_groups):
|
||||
xml_size = ET.SubElement(xml_var, 'linewidth')
|
||||
xml_size.text=str(daq_config[var][2][3])
|
||||
|
||||
# Détection de groupe de graphique
|
||||
data_group_i=0
|
||||
xml_group = ET.SubElement(xml_var, 'group')
|
||||
xml_group.text="-1" # Pas de groupe par défaut
|
||||
for data_group in data_groups:
|
||||
if isinstance(data_group, list):
|
||||
data_group_i+=1
|
||||
for data_subgroup in data_group: # Scan du sous-groupe
|
||||
if data_subgroup == var:
|
||||
xml_group.text=str(data_group_i)
|
||||
else:
|
||||
if data_group == var: # Pas de groupe
|
||||
xml_group.text="0"
|
||||
# Détection de groupe de graphique
|
||||
data_group_i=0
|
||||
xml_group = ET.SubElement(xml_var, 'group')
|
||||
xml_group.text="-1" # Pas de groupe par défaut
|
||||
for data_group in data_groups:
|
||||
if isinstance(data_group, list):
|
||||
data_group_i+=1
|
||||
for data_subgroup in data_group: # Scan du sous-groupe
|
||||
if data_subgroup == var:
|
||||
xml_group.text=str(data_group_i)
|
||||
else:
|
||||
if data_group == var: # Pas de groupe
|
||||
xml_group.text="0"
|
||||
|
||||
# Ecriture fichier
|
||||
plot_config = ET.ElementTree(xml_data)
|
||||
@ -206,7 +208,7 @@ def plot_start(data):
|
||||
scene.objects['System']['plot']=True
|
||||
|
||||
##
|
||||
# Ajout des données (fps = 60)
|
||||
# Ajout des données (lecture/s = fps = 60)
|
||||
##
|
||||
|
||||
def plot_add(cont):
|
||||
|
@ -25,14 +25,15 @@ import matplotlib.pyplot as plts
|
||||
twin_config = ET.parse('twin_config.xml').getroot()
|
||||
plot_config_tree = ET.parse('plot_config.xml').getroot()
|
||||
plot_config={}
|
||||
# csv_file= locals()['csv_file']
|
||||
# print(locals()['file_csv'])
|
||||
|
||||
###############################################################################
|
||||
# Configuration des plots
|
||||
###############################################################################
|
||||
|
||||
##
|
||||
# Génère le dictionnaire plot_config à partir du fichier XML plot_config.xml
|
||||
##
|
||||
|
||||
def plot_config_dict():
|
||||
for var in plot_config_tree[0][0]:
|
||||
var_dict={}
|
||||
@ -41,7 +42,20 @@ def plot_config_dict():
|
||||
var_dict.update({var[i].tag : var[i].text})
|
||||
plot_config.update({var.text: var_dict})
|
||||
|
||||
##
|
||||
# Returne une valeur du dictionnaire plot_config
|
||||
##
|
||||
|
||||
def plot_config_get(var, key):
|
||||
if key in plot_config[var]:
|
||||
return plot_config[var][key]
|
||||
else:
|
||||
return None
|
||||
|
||||
##
|
||||
# Nombre de groupe de courbe(s)
|
||||
##
|
||||
|
||||
def plot_nb():
|
||||
plot_config_list=list(plot_config)
|
||||
nbgroup = 0
|
||||
@ -67,7 +81,10 @@ def plot_nb():
|
||||
|
||||
class MplCanvas(FigureCanvasQTAgg):
|
||||
def __init__(self, parent=None, width=5, height=4, dpi=100):
|
||||
fig, self.plt = plts.subplots(plot_nb(), 1, sharex=True) # plot_nb() : nombre de graphiques
|
||||
if plot_nb() ==1: # plot_nb() : nombre de graphiques
|
||||
fig, self.plt = plts.subplots() # plot_nb() : nombre de graphiques
|
||||
else:
|
||||
fig, self.plt = plts.subplots(plot_nb(), 1, sharex=True) # plot_nb() : nombre de graphiques
|
||||
super(MplCanvas, self).__init__(fig)
|
||||
|
||||
###############################################################################
|
||||
@ -221,7 +238,6 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
# Lecture fichier CSV
|
||||
fields = []
|
||||
rows = []
|
||||
# with open(csv_file, newline='') as csv_buff:
|
||||
with open(sys.argv[1], newline='') as csv_buff:
|
||||
csv_reader = csv.reader(csv_buff, delimiter=';')
|
||||
fields = next(csv_reader)
|
||||
@ -243,8 +259,11 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
i+=1
|
||||
|
||||
# Plots
|
||||
# Groupe de plots : si group = 0 -> nouveau groupe, plot solitaire
|
||||
# si group = -1 -> pas de plot
|
||||
# si group > 0 -> numéro du groupe
|
||||
plt_i=0 # Compteur de plot
|
||||
plt_grp=[] # Groupe de plot
|
||||
plt_grp=[] # Groupe de plot [[numéro du plot, groupe du fichier CSV]]
|
||||
for i in range(len(fields)):
|
||||
var = fields[i]
|
||||
plt_current=-1 # Numéro du plot à créer
|
||||
@ -273,29 +292,50 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
plt_grp.append([plt_i, int(plot_config[var]['group'])])
|
||||
plt_i +=1
|
||||
|
||||
# Création du plot
|
||||
if twin_config[1][0].text == "True": # Configuration des plots activée
|
||||
self.canvas.plt[plt_current].plot(xdata[i], ydata[i], label=var, color=plot_config[var]['color'],
|
||||
linewidth=plot_config[var]['linewidth'], linestyle=plot_config[var]['linestyle'], marker=plot_config[var]['marker'])
|
||||
else:
|
||||
self.canvas.plt[plt_current].plot(xdata[i], ydata[i], '.-', label=var) # Configuration matplotlib par défaut
|
||||
# Création du plot unique
|
||||
if plot_nb() ==1:
|
||||
if twin_config[1][0].text == "True": # Configuration des plots activée
|
||||
self.canvas.plt.plot(xdata[i], ydata[i], label=var, color=plot_config_get(var, 'color'), linewidth=plot_config_get(var, 'linewidth'),
|
||||
linestyle=plot_config_get(var, 'linestyle'), marker=plot_config_get(var, 'marker'))
|
||||
else:
|
||||
self.canvas.plt.plot(xdata[i], ydata[i], '.-', label=var) # Configuration matplotlib par défaut
|
||||
|
||||
# for i in range(len(fields)):
|
||||
# if i != 0 : # i=0 -> Ne pas afficher car c'est temps (variable t)
|
||||
# if twin_config[1][0].text == "True": # Configuration des plots activée
|
||||
# self.canvas.plt[0].plot(xdata[i], ydata[i], label=fields[i], color=plot_config[fields[i]]['color'],
|
||||
# linewidth=plot_config[fields[i]]['linewidth'], linestyle=plot_config[fields[i]]['linestyle'], marker=plot_config[fields[i]]['marker'])
|
||||
# else:
|
||||
# self.canvas.plt[0].plot(xdata[i], ydata[i], '.-', label=fields[i])
|
||||
# Légende ou titre d'axe y
|
||||
if plt_grp[plt_current][1]==0:
|
||||
self.canvas.plt.set_ylabel(var)
|
||||
else:
|
||||
self.canvas.plt.legend()
|
||||
|
||||
# Création des subplots
|
||||
if plot_nb() >1:
|
||||
if twin_config[1][0].text == "True": # Configuration des plots activée
|
||||
self.canvas.plt[plt_current].plot(xdata[i], ydata[i], label=var, color=plot_config_get(var, 'color'), linewidth=plot_config_get(var, 'linewidth'),
|
||||
linestyle=plot_config_get(var, 'linestyle'), marker=plot_config_get(var, 'marker'))
|
||||
else:
|
||||
self.canvas.plt[plt_current].plot(xdata[i], ydata[i], '.-', label=var) # Configuration matplotlib par défaut
|
||||
|
||||
# Légende ou titre d'axe y
|
||||
if plt_grp[plt_current][1]==0:
|
||||
self.canvas.plt[plt_current].set_ylabel(var)
|
||||
else:
|
||||
self.canvas.plt[plt_current].legend()
|
||||
|
||||
# Décoration
|
||||
self.canvas.plt[plt_i-1].set_xlabel("Temps (s)")
|
||||
# self.canvas.plt[0].set_ylabel("Valeurs")
|
||||
self.canvas.plt[0].set_title(sys.argv[1])
|
||||
for i in range (plt_i):
|
||||
self.canvas.plt[i].axhline(linewidth=1, color='k')
|
||||
self.canvas.plt[i].grid(True, linestyle='--')
|
||||
self.canvas.plt[i].legend()
|
||||
if plot_nb() ==1: # 1 plot
|
||||
self.canvas.plt.set_xlabel("Temps (s)")
|
||||
# self.canvas.plt[0].set_ylabel("Valeurs")
|
||||
self.canvas.plt.set_title(sys.argv[1])
|
||||
self.canvas.plt.axhline(linewidth=1, color='k')
|
||||
self.canvas.plt.grid(True, linestyle='--')
|
||||
# self.canvas.plt.legend()
|
||||
else: # Plusieurs plots
|
||||
self.canvas.plt[plt_i-1].set_xlabel("Temps (s)")
|
||||
# self.canvas.plt[0].set_ylabel("Valeurs")
|
||||
self.canvas.plt[0].set_title(sys.argv[1])
|
||||
for i in range (plt_i):
|
||||
self.canvas.plt[i].axhline(linewidth=1, color='k')
|
||||
self.canvas.plt[i].grid(True, linestyle='--')
|
||||
# self.canvas.plt[i].legend()
|
||||
|
||||
# Redraw
|
||||
self.canvas.draw()
|
||||
|
Binary file not shown.
@ -41,7 +41,7 @@ from volrou_lib import * # Bibliothèque utilisateur du volet roulant
|
||||
|
||||
def commandes():
|
||||
|
||||
daq(['mot_angle'])
|
||||
daq(['mot_angle', 'mot_vitesse'])
|
||||
|
||||
# Init -> Descendre
|
||||
while fdc_b() ==False :
|
||||
@ -85,7 +85,8 @@ def commandes():
|
||||
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")
|
||||
|
||||
plot (['mot_angle'])
|
||||
# plot ([['mot_angle', 'mot_vitesse']])
|
||||
plot (['mot_angle', 'mot_vitesse'])
|
||||
|
||||
fin() # A garder
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user