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:
Philippe Roy 2023-01-28 23:06:55 +01:00
parent 370179d501
commit e887d1d8e9
7 changed files with 128 additions and 81 deletions

View File

@ -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.

View File

@ -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):

View File

@ -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.

View File

@ -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