Skip to content

Commit 97019dd

Browse files
ajustes
1 parent fac3db3 commit 97019dd

4,291 files changed

Lines changed: 642409 additions & 5 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
0 Bytes
Binary file not shown.
5.1 KB
Binary file not shown.
25.3 KB
Binary file not shown.
19.1 KB
Binary file not shown.
17.4 KB
Binary file not shown.
208 Bytes
Binary file not shown.

__pycache__/tela.cpython-312.pyc

6 Bytes
Binary file not shown.

controladores.py

Lines changed: 100 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,26 @@ def obter_cores(self):
3939
gerenciador_temas = GerenciadorTemasFallback()
4040
CORES = gerenciador_temas.obter_cores()
4141

42+
# Importar componentes de métricas e exportação
43+
try:
44+
from metricas_exportacao import MetricasControlador
45+
from painel_metricas import PainelMetricas
46+
except ImportError:
47+
# Fallback para caso os módulos não estejam disponíveis
48+
class MetricasControladorFallback:
49+
def calcular_metricas(self, t, y, sys=None): # Added sys parameter
50+
return {'y_final': 0, 'y_pico': 0, 'Tp': 0, 'Mp': 0, 'Tr': 0, 'Ts': 0, 'y_Ts': 0, 'Wn': 0, 'Zeta': 0}
51+
class PainelMetricasFallback(ctk.CTkFrame):
52+
def __init__(self, *args, **kwargs):
53+
super().__init__(*args, **kwargs)
54+
ctk.CTkLabel(self, text="Módulos de métricas não encontrados.", text_color="red").pack(pady=20)
55+
def atualizar_metricas(self, *args, **kwargs): pass
56+
def adicionar_figuras(self, *args, **kwargs): pass
57+
def limpar_dados(self): pass # Added for limpar_tudo
58+
MetricasControlador = MetricasControladorFallback
59+
PainelMetricas = PainelMetricasFallback
60+
61+
4262
ctk.set_appearance_mode(gerenciador_temas.obter_cores().get("mode", "dark"))
4363
ctk.set_default_color_theme("blue")
4464

@@ -96,6 +116,9 @@ def __init__(self, parent):
96116
self.grab_set()
97117
self.focus_set()
98118

119+
self.metricas_calc = MetricasControlador()
120+
self.painel_metricas = None
121+
99122
# Criar interface
100123
self.criar_cabecalho()
101124
self.criar_conteudo()
@@ -571,10 +594,10 @@ def criar_botoes_acao(self, parent):
571594
"""Cria os botões de ação"""
572595
ctk.CTkButton(
573596
parent,
574-
text="🔧 Gerar Análise Completa",
597+
text="╰┈➤ Gerar Análise Completa",
575598
command=self.gerar_analise,
576599
height=50,
577-
font=("Segoe UI", 14, "bold"),
600+
font=("Segoe UI", 14),
578601
fg_color=self.cores["primaria"],
579602
hover_color=self.cores["primaria_hover"],
580603
corner_radius=8
@@ -585,7 +608,7 @@ def criar_botoes_acao(self, parent):
585608
text="🗑️ Limpar Tudo",
586609
command=self.limpar_tudo,
587610
height=45,
588-
font=("Segoe UI", 14, "bold"),
611+
font=("Segoe UI", 14),
589612
fg_color=self.cores["terciaria"],
590613
hover_color=self.cores["terciaria_hover"],
591614
corner_radius=8
@@ -614,10 +637,12 @@ def criar_area_graficos(self, parent):
614637
self.notebook.add("📊 Resposta Temporal")
615638
self.notebook.add("🔍 Lugar das Raízes")
616639
self.notebook.add("⭕ Polos e Zeros")
640+
self.notebook.add("📈 Métricas") # Add metrics tab
617641

618642
self.criar_aba_resposta()
619643
self.criar_aba_lgr()
620644
self.criar_aba_polos_zeros()
645+
self.criar_aba_metricas() # Create metrics tab
621646

622647
def criar_aba_resposta(self):
623648
"""Cria a aba de resposta temporal"""
@@ -824,6 +849,19 @@ def criar_aba_polos_zeros(self):
824849
self.texto_info.grid(row=1, column=0, sticky="nsew", padx=10, pady=(0, 10))
825850
self.texto_info.insert("1.0", "Informações sobre polos e zeros aparecerão aqui...")
826851

852+
def criar_aba_metricas(self):
853+
"""Cria a aba de métricas com painel de comparação""" # New method
854+
tab = self.notebook.tab("📈 Métricas")
855+
856+
container = ctk.CTkFrame(tab, fg_color="transparent")
857+
container.pack(fill="both", expand=True, padx=5, pady=5)
858+
container.grid_columnconfigure(0, weight=1)
859+
container.grid_rowconfigure(0, weight=1)
860+
861+
# Criar painel de métricas
862+
self.painel_metricas = PainelMetricas(container, self.cores)
863+
self.painel_metricas.grid(row=0, column=0, sticky="nsew")
864+
827865
def configurar_toolbar(self, toolbar):
828866
"""Configura a toolbar do matplotlib para o tema dark"""
829867
toolbar.config(background=self.cores["acento"])
@@ -1050,6 +1088,7 @@ def gerar_analise(self):
10501088
self.gerar_resposta_temporal(G, Gc)
10511089
self.gerar_lgr(G, Gc)
10521090
self.gerar_polos_zeros(G, Gc)
1091+
self.gerar_metricas(G, Gc) # Add metrics generation
10531092

10541093
except Exception as e:
10551094
self.mostrar_erro(str(e))
@@ -1396,6 +1435,10 @@ def limpar_tudo(self):
13961435
self.tipo_controlador.set("PI")
13971436
self.atualizar_parametros_controlador()
13981437

1438+
# Limpar painel de métricas
1439+
if self.painel_metricas:
1440+
self.painel_metricas.limpar_dados()
1441+
13991442
self.mostrar_mensagem("Limpo", "Todos os dados foram limpos!")
14001443

14011444
def mostrar_mensagem(self, titulo, mensagem):
@@ -1430,6 +1473,59 @@ def fechar_janela(self):
14301473

14311474
self.destroy()
14321475

1476+
def gerar_metricas(self, G, Gc):
1477+
"""Gera e exibe as métricas de response temporal"""
1478+
try:
1479+
tipo_entrada = self.tipo_entrada.get()
1480+
1481+
# Gerar respostas
1482+
if tipo_entrada == "Degrau Unitário":
1483+
t_final = 20
1484+
t = np.linspace(0, t_final, 1000)
1485+
1486+
# Resposta do sistema sem controlador (malha aberta/fechada dependendo do contexto)
1487+
sys_sem_controlador = G
1488+
t_sem, y_sem = step_response(sys_sem_controlador, T=t)
1489+
1490+
# Resposta do sistema com controlador (malha fechada)
1491+
sys_com_controlador = feedback(G * Gc, 1)
1492+
t_com, y_com = step_response(sys_com_controlador, T=t)
1493+
else: # Rampa
1494+
t_final = 10
1495+
t = np.linspace(0, t_final, 1000)
1496+
u = t
1497+
1498+
# Resposta do sistema sem controlador (malha aberta/fechada dependendo do contexto)
1499+
sys_sem_controlador = G
1500+
num_sem, den_sem = sys_sem_controlador.num[0][0], sys_sem_controlador.den[0][0]
1501+
t_sem, y_sem, _ = scipy_lsim((num_sem, den_sem), U=u, T=t)
1502+
1503+
# Resposta do sistema com controlador (malha fechada)
1504+
sys_com_controlador = feedback(G * Gc, 1)
1505+
num_com, den_com = sys_com_controlador.num[0][0], sys_com_controlador.den[0][0]
1506+
t_com, y_com, _ = scipy_lsim((num_com, den_com), U=u, T=t)
1507+
1508+
metricas_sem = self.metricas_calc.calcular_metricas(t_sem, y_sem, sys=sys_sem_controlador)
1509+
metricas_com = self.metricas_calc.calcular_metricas(t_com, y_com, sys=sys_com_controlador)
1510+
1511+
# Armazenar figuras para exportação (se necessário no futuro)
1512+
figuras = [
1513+
("Resposta Sem Controlador", self.fig_resp_sem),
1514+
("Resposta Com Controlador", self.fig_resp_com),
1515+
("LGR Sem Controlador", self.fig_lgr_sem),
1516+
("LGR Com Controlador", self.fig_lgr_com),
1517+
("Polos e Zeros", self.fig_pz)
1518+
]
1519+
1520+
# Atualizar painel de métricas
1521+
if self.painel_metricas:
1522+
self.painel_metricas.atualizar_metricas(metricas_sem, metricas_com, tipo_entrada)
1523+
self.painel_metricas.adicionar_figuras(figuras)
1524+
1525+
except Exception as e:
1526+
print(f"[v0] Erro ao gerar métricas: {e}")
1527+
self.mostrar_erro(f"Erro ao calcular métricas: {str(e)}")
1528+
14331529

14341530
def abrir_analisador_controladores(parent_window):
14351531
"""
@@ -1458,4 +1554,4 @@ def abrir_analisador_controladores(parent_window):
14581554
root = ctk.CTk()
14591555
root.withdraw()
14601556
app = JanelaControladores(root)
1461-
root.mainloop()
1557+
root.mainloop()

logs/sistema_20251110_022704.log

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
2025-11-10 02:27:04 - SistemaControle - INFO - [logger_sistema.py:63] - Logger iniciado com sucesso
2+
2025-11-10 02:27:04 - SistemaControle - INFO - [logger_sistema.py:71] - Iniciando aplicação SistemaTCC
3+
2025-11-10 02:27:06 - SistemaControle - INFO - [logger_sistema.py:71] - Abrindo módulo de controladores
4+
2025-11-10 02:27:51 - SistemaControle - INFO - [logger_sistema.py:71] - Fechando aplicação SistemaTCC
5+
2025-11-10 02:27:51 - SistemaControle - INFO - [logger_sistema.py:71] - Aplicação SistemaTCC encerrada com sucesso.

logs/sistema_20251110_024057.log

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
2025-11-10 02:40:57 - SistemaControle - INFO - [logger_sistema.py:63] - Logger iniciado com sucesso
2+
2025-11-10 02:40:57 - SistemaControle - INFO - [logger_sistema.py:71] - Iniciando aplicação SistemaTCC
3+
2025-11-10 02:40:58 - SistemaControle - INFO - [logger_sistema.py:71] - Abrindo módulo de controladores
4+
2025-11-10 02:41:00 - SistemaControle - ERROR - [logger_sistema.py:83] - Erro ao abrir controladores: 'destrutiva'
5+
2025-11-10 02:41:13 - SistemaControle - INFO - [logger_sistema.py:71] - Fechando aplicação SistemaTCC
6+
2025-11-10 02:41:13 - SistemaControle - INFO - [logger_sistema.py:71] - Aplicação SistemaTCC encerrada com sucesso.

0 commit comments

Comments
 (0)