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(): 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.

View File

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

View File

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

View File

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