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():
|
def commandes():
|
||||||
|
|
||||||
|
daq(['mot_angle', 'mot_vitesse', 'cabine_z', 'cabine_vitesse'])
|
||||||
|
|
||||||
# Init -> Descendre
|
# Init -> Descendre
|
||||||
while pc_0() ==False :
|
while pc_0() ==False :
|
||||||
voy_0(True)
|
voy_0(True)
|
||||||
@ -48,49 +50,51 @@ def commandes():
|
|||||||
voy_0(False)
|
voy_0(False)
|
||||||
print ("")
|
print ("")
|
||||||
|
|
||||||
daq(['mot_angle', 'mot_vitesse', 'cabine_z', 'cabine_vitesse'])
|
# daq(['mot_angle', 'mot_vitesse', 'cabine_z', 'cabine_vitesse'])
|
||||||
|
|
||||||
# Monter
|
# # Monter
|
||||||
mot_digitset (500)
|
# mot_digitset (500)
|
||||||
t0,z0, a0= get('t'), get('cabine_z'), get('mot_angle')
|
# 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 :
|
# while pc_1() ==False :
|
||||||
voy_1(True)
|
# voy_1(True)
|
||||||
mot_d(False)
|
# mot_d(False)
|
||||||
mot_m(True)
|
# mot_m(True)
|
||||||
mot_pas, mot_vitesse, cabine_pas, cabine_vitesse= get('mot_pas'), get('mot_vitesse'), get('cabine_pas'), get('cabine_vitesse')
|
# mot_pas, mot_vitesse, cabine_pas, cabine_vitesse= get('mot_pas'), get('mot_vitesse'), get('cabine_pas'), get('cabine_vitesse')
|
||||||
mot_m(False)
|
# mot_m(False)
|
||||||
voy_1(False)
|
# voy_1(False)
|
||||||
t1,z1, a1= get('t'), get('cabine_z'), get('mot_angle')
|
# 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 ("")
|
||||||
print ("Monter : "+str(round(t1-t0, 3)) +" s - distance : " +str(round(z1-z0, 3))+" mm - angle : " +str(round(a1-a0, 3))+
|
# 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 - 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")
|
# " rad/s - cabine_pas : " +str(round(cabine_pas, 3))+" mm/impulsion - moteur_pas : " +str(round(mot_pas, 3))+" rad/impulsion")
|
||||||
print ("")
|
# print ("")
|
||||||
|
|
||||||
# Descendre
|
# # Descendre
|
||||||
mot_digitset () # 5 tr/s
|
# mot_digitset () # 5 tr/s
|
||||||
t0,z0, a0= get('t'), get('cabine_z'), get('mot_angle')
|
# 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 :
|
# while pc_0() ==False :
|
||||||
voy_0(True)
|
# voy_0(True)
|
||||||
mot_m(False)
|
# mot_m(False)
|
||||||
mot_d(True)
|
# mot_d(True)
|
||||||
mot_pas, mot_vitesse, cabine_pas, cabine_vitesse= get('mot_pas'), get('mot_vitesse'), get('cabine_pas'), get('cabine_vitesse')
|
# mot_pas, mot_vitesse, cabine_pas, cabine_vitesse= get('mot_pas'), get('mot_vitesse'), get('cabine_pas'), get('cabine_vitesse')
|
||||||
mot_d(False)
|
# mot_d(False)
|
||||||
voy_0(False)
|
# voy_0(False)
|
||||||
t1,z1, a1= get('t'), get('cabine_z'), get('mot_angle')
|
# 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 ("")
|
||||||
print ("Descendre : "+str(round(t1-t0, 3)) +" s - distance : " +str(round(z1-z0, 3))+" mm - angle : " +str(round(a1-a0, 3))+
|
# 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 - 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")
|
# " 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
|
fin() # A garder
|
||||||
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# En: External call << DONT CHANGE THIS SECTION >>
|
# En: External call << DONT CHANGE THIS SECTION >>
|
||||||
# Fr: Appel externe << NE PAS MODIFIER CETTE 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
|
system=importlib.import_module(scene.objects['System']['system']) # Système
|
||||||
daq_config = system.get_public_vars()
|
daq_config = system.get_public_vars()
|
||||||
|
|
||||||
# CSV
|
# Données de l'acquisition
|
||||||
daq_data=[]
|
daq_data=[]
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@ -62,7 +62,7 @@ def daq(data):
|
|||||||
scene.objects['System']['daq']=True
|
scene.objects['System']['daq']=True
|
||||||
|
|
||||||
##
|
##
|
||||||
# Ajout des données (fps = 60)
|
# Ajout des données (lecture/s = fps = 60)
|
||||||
##
|
##
|
||||||
|
|
||||||
def daq_add(cont):
|
def daq_add(cont):
|
||||||
@ -115,6 +115,8 @@ def plot_config_generate(data_groups):
|
|||||||
for var in daq_config_list:
|
for var in daq_config_list:
|
||||||
xml_var = ET.SubElement(xml_plot, 'var')
|
xml_var = ET.SubElement(xml_plot, 'var')
|
||||||
xml_var.text=var
|
xml_var.text=var
|
||||||
|
|
||||||
|
# Configuration graphique de ma série de donnée
|
||||||
if len(daq_config[var][2]) >=4:
|
if len(daq_config[var][2]) >=4:
|
||||||
xml_mark = ET.SubElement(xml_var, 'marker')
|
xml_mark = ET.SubElement(xml_var, 'marker')
|
||||||
xml_mark.text=daq_config[var][2][0]
|
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 = ET.SubElement(xml_var, 'linewidth')
|
||||||
xml_size.text=str(daq_config[var][2][3])
|
xml_size.text=str(daq_config[var][2][3])
|
||||||
|
|
||||||
# Détection de groupe de graphique
|
# Détection de groupe de graphique
|
||||||
data_group_i=0
|
data_group_i=0
|
||||||
xml_group = ET.SubElement(xml_var, 'group')
|
xml_group = ET.SubElement(xml_var, 'group')
|
||||||
xml_group.text="-1" # Pas de groupe par défaut
|
xml_group.text="-1" # Pas de groupe par défaut
|
||||||
for data_group in data_groups:
|
for data_group in data_groups:
|
||||||
if isinstance(data_group, list):
|
if isinstance(data_group, list):
|
||||||
data_group_i+=1
|
data_group_i+=1
|
||||||
for data_subgroup in data_group: # Scan du sous-groupe
|
for data_subgroup in data_group: # Scan du sous-groupe
|
||||||
if data_subgroup == var:
|
if data_subgroup == var:
|
||||||
xml_group.text=str(data_group_i)
|
xml_group.text=str(data_group_i)
|
||||||
else:
|
else:
|
||||||
if data_group == var: # Pas de groupe
|
if data_group == var: # Pas de groupe
|
||||||
xml_group.text="0"
|
xml_group.text="0"
|
||||||
|
|
||||||
# Ecriture fichier
|
# Ecriture fichier
|
||||||
plot_config = ET.ElementTree(xml_data)
|
plot_config = ET.ElementTree(xml_data)
|
||||||
@ -206,7 +208,7 @@ def plot_start(data):
|
|||||||
scene.objects['System']['plot']=True
|
scene.objects['System']['plot']=True
|
||||||
|
|
||||||
##
|
##
|
||||||
# Ajout des données (fps = 60)
|
# Ajout des données (lecture/s = fps = 60)
|
||||||
##
|
##
|
||||||
|
|
||||||
def plot_add(cont):
|
def plot_add(cont):
|
||||||
|
@ -25,14 +25,15 @@ import matplotlib.pyplot as plts
|
|||||||
twin_config = ET.parse('twin_config.xml').getroot()
|
twin_config = ET.parse('twin_config.xml').getroot()
|
||||||
plot_config_tree = ET.parse('plot_config.xml').getroot()
|
plot_config_tree = ET.parse('plot_config.xml').getroot()
|
||||||
plot_config={}
|
plot_config={}
|
||||||
# csv_file= locals()['csv_file']
|
|
||||||
# print(locals()['file_csv'])
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Configuration des plots
|
# Configuration des plots
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
|
##
|
||||||
# Génère le dictionnaire plot_config à partir du fichier XML plot_config.xml
|
# Génère le dictionnaire plot_config à partir du fichier XML plot_config.xml
|
||||||
|
##
|
||||||
|
|
||||||
def plot_config_dict():
|
def plot_config_dict():
|
||||||
for var in plot_config_tree[0][0]:
|
for var in plot_config_tree[0][0]:
|
||||||
var_dict={}
|
var_dict={}
|
||||||
@ -41,7 +42,20 @@ def plot_config_dict():
|
|||||||
var_dict.update({var[i].tag : var[i].text})
|
var_dict.update({var[i].tag : var[i].text})
|
||||||
plot_config.update({var.text: var_dict})
|
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)
|
# Nombre de groupe de courbe(s)
|
||||||
|
##
|
||||||
|
|
||||||
def plot_nb():
|
def plot_nb():
|
||||||
plot_config_list=list(plot_config)
|
plot_config_list=list(plot_config)
|
||||||
nbgroup = 0
|
nbgroup = 0
|
||||||
@ -67,7 +81,10 @@ def plot_nb():
|
|||||||
|
|
||||||
class MplCanvas(FigureCanvasQTAgg):
|
class MplCanvas(FigureCanvasQTAgg):
|
||||||
def __init__(self, parent=None, width=5, height=4, dpi=100):
|
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)
|
super(MplCanvas, self).__init__(fig)
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@ -221,7 +238,6 @@ class MainWindow(QtWidgets.QMainWindow):
|
|||||||
# Lecture fichier CSV
|
# Lecture fichier CSV
|
||||||
fields = []
|
fields = []
|
||||||
rows = []
|
rows = []
|
||||||
# with open(csv_file, newline='') as csv_buff:
|
|
||||||
with open(sys.argv[1], newline='') as csv_buff:
|
with open(sys.argv[1], newline='') as csv_buff:
|
||||||
csv_reader = csv.reader(csv_buff, delimiter=';')
|
csv_reader = csv.reader(csv_buff, delimiter=';')
|
||||||
fields = next(csv_reader)
|
fields = next(csv_reader)
|
||||||
@ -243,8 +259,11 @@ class MainWindow(QtWidgets.QMainWindow):
|
|||||||
i+=1
|
i+=1
|
||||||
|
|
||||||
# Plots
|
# 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_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)):
|
for i in range(len(fields)):
|
||||||
var = fields[i]
|
var = fields[i]
|
||||||
plt_current=-1 # Numéro du plot à créer
|
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_grp.append([plt_i, int(plot_config[var]['group'])])
|
||||||
plt_i +=1
|
plt_i +=1
|
||||||
|
|
||||||
# Création du plot
|
# Création du plot unique
|
||||||
if twin_config[1][0].text == "True": # Configuration des plots activée
|
if plot_nb() ==1:
|
||||||
self.canvas.plt[plt_current].plot(xdata[i], ydata[i], label=var, color=plot_config[var]['color'],
|
if twin_config[1][0].text == "True": # Configuration des plots activée
|
||||||
linewidth=plot_config[var]['linewidth'], linestyle=plot_config[var]['linestyle'], marker=plot_config[var]['marker'])
|
self.canvas.plt.plot(xdata[i], ydata[i], label=var, color=plot_config_get(var, 'color'), linewidth=plot_config_get(var, 'linewidth'),
|
||||||
else:
|
linestyle=plot_config_get(var, 'linestyle'), marker=plot_config_get(var, 'marker'))
|
||||||
self.canvas.plt[plt_current].plot(xdata[i], ydata[i], '.-', label=var) # Configuration matplotlib par défaut
|
else:
|
||||||
|
self.canvas.plt.plot(xdata[i], ydata[i], '.-', label=var) # Configuration matplotlib par défaut
|
||||||
|
|
||||||
# for i in range(len(fields)):
|
# Légende ou titre d'axe y
|
||||||
# if i != 0 : # i=0 -> Ne pas afficher car c'est temps (variable t)
|
if plt_grp[plt_current][1]==0:
|
||||||
# if twin_config[1][0].text == "True": # Configuration des plots activée
|
self.canvas.plt.set_ylabel(var)
|
||||||
# self.canvas.plt[0].plot(xdata[i], ydata[i], label=fields[i], color=plot_config[fields[i]]['color'],
|
else:
|
||||||
# linewidth=plot_config[fields[i]]['linewidth'], linestyle=plot_config[fields[i]]['linestyle'], marker=plot_config[fields[i]]['marker'])
|
self.canvas.plt.legend()
|
||||||
# else:
|
|
||||||
# self.canvas.plt[0].plot(xdata[i], ydata[i], '.-', label=fields[i])
|
# 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
|
# Décoration
|
||||||
self.canvas.plt[plt_i-1].set_xlabel("Temps (s)")
|
if plot_nb() ==1: # 1 plot
|
||||||
# self.canvas.plt[0].set_ylabel("Valeurs")
|
self.canvas.plt.set_xlabel("Temps (s)")
|
||||||
self.canvas.plt[0].set_title(sys.argv[1])
|
# self.canvas.plt[0].set_ylabel("Valeurs")
|
||||||
for i in range (plt_i):
|
self.canvas.plt.set_title(sys.argv[1])
|
||||||
self.canvas.plt[i].axhline(linewidth=1, color='k')
|
self.canvas.plt.axhline(linewidth=1, color='k')
|
||||||
self.canvas.plt[i].grid(True, linestyle='--')
|
self.canvas.plt.grid(True, linestyle='--')
|
||||||
self.canvas.plt[i].legend()
|
# 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
|
# Redraw
|
||||||
self.canvas.draw()
|
self.canvas.draw()
|
||||||
|
Binary file not shown.
@ -41,7 +41,7 @@ from volrou_lib import * # Bibliothèque utilisateur du volet roulant
|
|||||||
|
|
||||||
def commandes():
|
def commandes():
|
||||||
|
|
||||||
daq(['mot_angle'])
|
daq(['mot_angle', 'mot_vitesse'])
|
||||||
|
|
||||||
# Init -> Descendre
|
# Init -> Descendre
|
||||||
while fdc_b() ==False :
|
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))+
|
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")
|
" 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
|
fin() # A garder
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user