O diagrama de casos de uso apresenta as formas de interação dos atores com
o sistema. Dentro do projeto existem dois atores: o usuário e o gerente. O usuário
possui duas ações possíveis no sistema: buscar valor de um tag em tempo real e
buscar o histórico de um tag, como apresentado na figura 17. Além de buscar tags o
gerente possui os papeis de criar, editar e deletar tags e pointesources.
O sistema é composto por pacotes com funções específicas, por isso na
modelagem as estruturas são divididas e cada um destes pacotes contém o conjunto
de classes necessárias para desempenhar corretamente sua função no sistema. A
figura 18 apresenta o diagrama de pacotes de classes do sistema. O primeiro pacote
é o interface, que possui a função de coletar os dados da fonte e enviar ao pacote de
armazenamento e é executado no servidor de coleta de dados possuindo três classes:
PrincipalInt, Coleta e Transmissão.
O segundo pacote é o de armazenamento que é responsável por compactar e
guardar as informações no banco de dados. Ele é executado no servidor de dados e
Figura 16: Modelo de banco de dados Temporal
Fonte: Próprio autor
Figura 17: Modelagem de casos de uso do sistema
Fonte: Próprio autor
possui três classes: Principal, Leitura e Compressão.
O terceiro pacote é o de visualização que tem como característica principal
exibir a informação desejada ao usuário.
Ele é executado por um serviço web
presente no mesmo servidor do banco de dados e possui as classes PrincipalWeb,
ConsultaHistórico e ConsultaTempoReal. À frente serão detalhadas as classes de
cada módulo.
Figura 18: Diagrama de pacotes
Fonte: Próprio autor
No módulo de coleta, a classe PrincipalInt tem como variável o atributo
EntradaUsuário que é lido e passado como parâmetro para os métodos ParaColeta()
e IniciaColeta(). A classe Coleta lê o dado pelo método Leitura() e valida o dado a ser
armazenado, retornando-o para a classe Transmissão que possui a função de enviar a
informação ao sistema de armazenamento utilizando o método EscreveModLeitura().
O pacote coleta é melhor apresentado na figura 19.
O módulo de armazenamento, apresentado na figura 20, interage diretamente
com o banco de dados. A classe Principal executa os métodos IniciaArmazenamento()
e ParaArmazenamento().
A classe Leitura aguarda os dados chegarem da
interface pelo método LeColeta().
A cada dado recebido é executado o método
TesteParalelogramo() que faz a análise de compressão com base no algoritmo
Swinging Doors.
Este lê o desvio definido para a tag e o tempo máximo de
compressão, cria o paralelogramo de análise e armazena o dado comprimido.
Figura 19: Classes do pacote Coleta
Fonte: Próprio autor
Figura 20: Classes do pacote armazenamento
Fonte: Próprio autor
O pacote visualização, apresentado na figura 21, possui classes que
fazem busca, tanto do valor histórico (ConsultaHistorico), quanto em tempo real
(ConsultaTempoReal).
Ambas sobrescrevem o método BuscaTag() da classe
PrincipalWeb.
Na classe ConsultaTempoReal é lida uma tag a partir do método
BuscaValorAtual() e é retornado um único valor do snapshot.
Já o método
BuscaHistórica() retorna o período desejado pelo método TempoValido() e busca um
vetor de valores com suas respectivas datas.
Os casos de interação mais complexos são detalhados em diagramas de
atividades apresentados nas figuras 22 e 23.
Figura 21: Classes do pacote Visualização
Fonte: Próprio autor
No processo de buscar valores das tags em tempo real, o usuário deve
selecionar a tag desejada. O sistema deve buscar o valor atual e mostrar via browser
o valor da tag desejada em tempo real. Caso não exista a tag é retornada uma
mensagem de erro, como mostrado na figura 22. Como esta é a busca de um valor em
tempo real, há a necessidade de que essa atividade ocorra não somente ao buscar
a tag, mas durante todo o momento que a página esteja no browser, fazendo as
atualizações da exibição quando ocorrerem mudanças de valor.
Para uma busca de histórico de tags o usuário inicia a consulta da mesma forma
que para uma tag em tempo real. Após a confirmação da existência da tag o usuário
deve entrar com um período de tempo válido. Assim, o sistema verifica a validade do
tempo e exibe os dados para o período como apresentado na sequência de atividades
da figura 23.
O diagrama de atividades da figura 24 apresenta o funcionamento do módulo
de coleta. Uma vez recebido o dado, é feita a análise do instrumento fonte. Existindo
o instrumento, é lido o tipo do dado que o instrumento transmitiu. Em seguida, é feita
a verificação da validade do tipo da informação. Uma tag do tipo inteiro, por exemplo,
não deve receber uma string, sendo o dado descartado. Caso o dado seja válido o
valor é enviado para o sistema de armazenamento e a rotina é finalizada.
Para a rotina de armazenamento, apresentada no diagrama da figura 25, a
cada valor novo que chega da interface, uma sequência de passos é realizada a fim
de permitir a gravação da informação no banco. Recebendo um novo valor é buscada
Figura 22: Diagrama de atividades da busca de valor real
Fonte: Próprio autor
Figura 23: Diagrama de atividades da busca de valor histórico
Fonte: Próprio autor
a tag referente ao instrumento. Caso exista a tag, é lido o desvio e aplicado o algoritmo
de compressão. Se a resposta do algoritimo for positiva, o dado é armazenado. Se
negativa o dado é descartado.
Figura 24: Diagrama de estados da coleta
Fonte: Próprio autor
Já com os dados armazenados no banco o usuário consultará o histórico de
uma tag como apresentado na sequência da figura 26. Para tanto, o usuário deve
buscar por uma tag. Caso a tag exista, o sistema retorna a confirmação de existência.
Em sequência, o usuário deve inserir o período de interesse, o sistema confirma a
validade e retorna um vetor composto pelos valores e tempos armazenados no banco
dentro do período desejado.
Quanto à implantação, o sistema apresentará a estrutura física exibida no
diagrama da figura 27.
A estação de trabalho Nomad II se comunica via porta
serial RS232 com a interface de coleta, que envia os dados para o servidor de
armazenamento. No servidor de banco de dados as informações são pré-tratadas
e armazenadas. O serviço Web implantado no mesmo servidor de banco de dados se
utilizará dessas informações armazenadas para fornecer visualizações ao cliente via
browser.
Figura 25: Diagrama de estados do Armazenamento
Figura 26: Exemplo de sequência para consulta de um dado histórico
Fonte: Próprio autor
Figura 27: Diagrama de implantação do sistema