Commit 4ab31a5a authored by Alisson Claudino's avatar Alisson Claudino

Adição de avisos em caso de dados inválidos na atualização

parent ebebe830
#importação de bibliotecas
from PyQt5 import QtWidgets
from pyqtgraph import PlotItem,AxisItem
import numpy as np
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Classe Graph baseada em pyqtgraph #
# Autor: Alisson Claudino de Jesus (alisson.claudino@ufrgs.br) #
# Autor: Alisson Claudino (alisson.claudino@ufrgs.br) #
# Licença: GNU GPLv2 #
# Propósito: Gerar gráficos de tempo real com diversas curvas #
# #
# #
# Observações: #
# Os parâmetros iniciais dados são: taxa de amostragem (em segundos), escala de tempo (float), #
# numero de eixos (int),valores de escala y_min e y_max (arrays de float), dimensões do gráfico (int,int) #
# cores das curvas (array de char), nomes das curvas (array de strings). e unidades das curvas (array de #
# string) #
# Os parâmetros iniciais dados são: taxa de amostragem em segundos (float), escala de tempo (float), #
# numero de eixos (int),valores de escala y_min e y_max (float[],float[]), dimensões do gráfico (int,int) #
# cores das curvas (char[]), nomes das curvas (string[]). e unidades das curvas (string[]) #
# #
# Para a função updateData, é dado um array de float de mesmo tamanho que o número de curvas para que #
# todas possam ser atualizadas corretamente #
# #
# Para a função updateData, é dado um float[] de mesmo tamanho que o número de curvas para que todas #
# possam ser atualizadas corretamente #
# #
# O atributo index é utilizado para controle do tamanho dos vetores com valores de x e y de gráfico #
# #
......@@ -38,10 +40,12 @@ class Graph(PlotItem): #Herança de pyqtgraph.PlotItem
index = 0 #Valor de índice para controle de tamanho dos arrays
offset = [] #Array com valores de offset para correta visualização das curvas
correctFactor = [] #Array com valores de fator de correção para correta visualização das curvas
warningFlag = False
def __init__(self,x_sampling, x_range, n_axis, y_min, y_max, x_size, y_size, color, name,unit): #Construtor da classe
super(Graph, self).__init__() #Instanciamento do construtor da classe mãe
self.n_axis=n_axis
for n in range(0,n_axis):
self.offset.append(min(y_min)-y_min[n])
self.correctFactor.append((max(y_max)+min(y_min))/(y_max[n]-y_min[n]))
......@@ -82,17 +86,37 @@ class Graph(PlotItem): #Herança de pyqtgraph.PlotItem
def updateGraph(self, y):
for n in range(0,len(y)):
y_dim=len(y)
if(y_dim<self.n_axis and self.warningFlag==False): #Emissão de aviso caso hajam menos dados que curvas
error = QtWidgets.QMessageBox()
error.setText("Array enviado possui %(a)d valores, necessário no mínimo %(b)d valores. Os %(c)dº primeiros gráficos "
"serão setados com os valores recebidos a partir de então" % {"a":len(y),"b":int(self.n_axis),"c":len(y)})
error.setWindowTitle("Aviso: Dados recebidos menor que o número de curvas")
error.exec()
self.warningFlag = True
if(y_dim>self.n_axis and self.warningFlag==False): #Emissão de aviso caso hajam mais dados que curvas
error = QtWidgets.QMessageBox()
error.setText("Array enviado possui %(a)d valores, necessário no máximo %(b)d valores. Os gráficos serão atualizados "
"com os %(c)d primeiros valores recebidos" % {"a":len(y),"b":int(self.n_axis),"c":int(self.n_axis)})
error.setWindowTitle("Aviso: Dados recebidos maior que o número de curvas")
error.exec()
self.warningFlag=True
y_dim=self.n_axis
for n in range(0,y_dim):
self.y[n]=np.append(self.y[n],(float(y[n])+self.offset[n])*self.correctFactor[n]) #Cada valor contido no array y vai para seu respectivo array com sua respectiva escala
print(float(y[n]))
if len(self.y[0]) > self.x_range: #Tamanho do array de tempo deve ser igual ao de cada curva
for n in range(0,len(y)): #Quando o mesmo chega no valor máximo (definido pela escala+amostragem)
for n in range(0,y_dim): #Quando o mesmo chega no valor máximo (definido pela escala+amostragem)
self.y[n] = np.delete(self.y[n], 0) #O valor de índice 0 é removido para que um novo valor possa entrar no maior indice
self.index = self.x_range #Valor de índice quando chega no máximo, é mantido nele
self.index = self.x_range #Valor de índice quando chega no máximo, é mantido nele
else:
self.x.append(self.index) #Se o tamanho do array ainda não chegou ao seu máximo, então valores vão sendo adicionados no array de tempo
for n in range(0, len(y)):
for n in range(0, y_dim):
self.curve[n].setData(self.x,self.y[n]) #Replotagem das curvas com valores atualizados
self.index += 1 #Valor de índice é aumentado
self.index += 1 #Valor de índice é aumentado
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment