VisciPower
O objetivo principal do desenvolvimento do \textbf{\emph{VisciPower}}
é propor uma interface gráfica interativa para um
Sistema de Suporte à Decisões, auxiliando os operadores
a localizar áreas com problemas operativos em relação
à carga ativa, no contexto da programação diária
da geração elétrica (pré-despacho).
A seguir serão apresentadas as propostas de arquitetura dos
dados e de interface que foram introduzidas pelo projeto, com suas
devidas justificativas. Estas propostas foram concebidas através
de sucessivas interações com o usuário final
do \textit{software}, promovendo evoluções que complementaram
gradativamente o projeto de interface. Essas interações
são executadas através de reuniões periódicas
para se descubrir sobre os requisitos do projeto e também
para que seja analisado o estado corrente da interface.
Descrição e Funcionalidades

Diagrama da arquitetura do VisciPower
A figura acima exibe a arquitetura do protótipo do sistema
gráfico interativo de suporte à elaboração
do pré-despacho, que denominamos VisciPower,
desenvolvido com base em nosso diagrama
de fluxo de dados. Ela consiste de quatro módulos principais:
- o módulo de Gerenciamento
de Dados;
- o módulo de Gerenciamento
do Mapeamento;
- o módulo de Gerenciamento
do Diálogo e
- o Simulador.
Foi escolhida uma plataforma totalmente open-source para
sua implementação: o sistema operacional Linux,
a linguagem de programação C, o sistema gerenciador
de banco de dados MySQL,
a biblioteca gráfica OpenGL
e o toolkit de interface gráfica GLUI.
Uma vez que não foi possível obter as informações
reais do sistema elétrico brasileiro, extraímos as
informações elétricas e geográficas
permanentes de arquivos
de casos de teste de sistemas elétricos. Para que o sistema
se aproveitasse de todos os benefícios trazidos pelos mecanismos
de acesso que um sistema gerenciador de banco de dados fornece,
os dados foram armazenados em um servidor MySQL, executado
localmente em um sistema Linux. Para cada sistema elétrico
utilizado era necessário a implementação de
um total de sete tabelas, em conformidade com as entidades e atributos
de nosso modelo de dados:
- Barramento (IEEE) --
armazena os dados elétricos persistentes, provenientes
dos arquivos originais do IEEE
Common Data Format; nem todos os dados são utilizados,
no entanto foram mantidos para preservar o padrão original
dos arquivos de teste.
- Barramento (Pré-despacho)
-- nesta tabela são armazenadas todas as
potências ativas de geração e as demandas
nos barramentos, ao longo do horizonte de tempo estudado (em nosso
caso, 24 horas = 24 valores para geração + 24 para
demandas);
- Barramento (Gráfico) -- contém
os dados geo-referenciados necessários para a construção
gráfica do barramento -- latitude e longitude de dois pontos,
o inicial e o final;
- Linha (IEEE) -- assim
como no caso dos barramentos, esta tabela também armazena
os dados elétricos persistentes provenientes dos arquivos
de teste originais.
- Linha (Pré-despacho) -- esta
tabela armazena todos os carregamentos da linha de transmissão
(provenientes de simulações anteriores armazenadas
no banco de dados) ao longo do período de tempo estudado,
além do valor máximo suportado pelo ramo.
- Linha (Gráfico) -- aqui
são referenciadas a quantidade e quais são as torres
que irão compor uma linha de transmissão, além
do valor das coordenadas geo-referenciadas do centro da linha,
apenas para a determinação do local onde serão
plotados os círculos/piecharts.
- Torre -- na tabela
com menor número de colunas são armazenados os dados
geo-referenciados das torres.
A conexão é feita através de bibliotecas para
a linguagem C que fornecem funcionalidades para efetuar queries,
escritas na linguagem SQL, em um banco de dados MySQL.
As consultas se resumiam em simples seleções (comando
SELECT do SQL) dos valores das colunas, que eram
então armazenados em estruturas structs da linguagem
C. Estas estruturas também refletiam a modelagem de dados
do sistema.
Nosso protótipo foi testado com restrições
de geração e demandas previstas, com usuários
que já haviam tido algum contato com sistemas elétricos.
O módulo de Gerenciamento de Dados responde pelas
etapas de enriquecimento, análise e filtragem dos dados.
O enriquecimento nada mais é do que a correlação
das chaves primárias das diferentes tabelas de dados elétricos
com as tabelas de dados geo-referenciados. Na análise, algoritmos
calculam percentagens e outros valores obtidos dos dados elétricos,
comparando-os posteriormente com variáveis pré-estabelecidas
que definem os limites de sobrecarga e/ou parâmetros para
a filtragem de dados. A filtragem por níveis de tensão
é também feita nesta etapa -- dependendo da seleção
atual do usuário, os dados sobre as linhas são enviados
ou não para a próxima etapa da arquitetura.
O módulo de Gerenciamento do Mapeamento é
responsável por mapear toda a informação de
interesse em entidades e atributos gráficos. As linhas de
transmissão, barramentos e torres foram mapeadas através
das informações geo-referenciadas, formando pontos
e poli-linhas line strips implementadas através
das primitivas gráficas nativas do OpenGL. O uso
de cores também é feito diretamente atribuindo-se
um valor diferente para o buffer de cor corrente. A decisão
de seu uso depende diretamente de valores calculados na etapa de
gerenciamento de dados. Todos os outros objetos gráficos
(símbolos elétricos, círculos, setas, piecharts)
foram implementados através de display lists, funções
que facilitam o trabalho e aumentam a eficiência na criação
de objetos gráficos complexos formados por várias
primitivas, evitando-se que os mesmos cálculos sejam feitos
inúmeras vezes.
O Simulador gera configurações de carregamento
distintas em um instante de tempo especificado, através dos
dados obtidos do sistema e das alterações inseridas
pelo usuário. Os resultados são computados em tempo
de execução e armazenados na memória principal,
enquanto o usuário estiver interagindo com o sistema, através
de uma função específica que implementa o modelo
de cálculo de fluxo de carga simplificado.
Para a Interface foram implementadas duas janelas: a janela
principal e a janela de detalhamento, conforme veremos
a seguir. Estas janelas são gerenciadas pela biblioteca gráfica
glut em conjunto com o toolkit gráfico
GLUI.
Para melhorar o desempenho do sistema, apenas o conteúdo
da região potencialmente visível é processada
para gerar a nova imagem. Isso é feito computando-se as coordenadas
x e y mínima e máxima do volume de visualização
(viewport) corrente e enviando todos os objetos de visualização
que possuem coordenadas entre esses valores para o pipeline
de renderização.
Para facilitar as interações e melhorar a usabilidade,
foram incluídos em nossa interface alguns mecanismos de interação
widgets com o GLUI,
tais como listas de seleção, botões, checkboxes,
itens de navegação e caixas de seleção.
Utilizamos a API OpenGL
para acessar todos os recursos de renderização.
(continua...) |