4. PROJETO DE SOFTWARE E IMPLEMENTAÇÃO
4.3 C LASSES DO PROJETO DE SOFTWARE DO PDC
4.3.5 Classe C_Conexao
De acordo os desenvolvimentos previstos para a implementação do projeto de software do PDC, observou-se a necessidade de se separar os processos que envolvem protocolos de rede daqueles que envolvem aquisição e processamento de dados.
Esta separação permite um tratamento isolado (encapsulado) de necessidades de comunicação de rede, comuns aos objetos C_PMU_PDC e C_PDC_PDC, haja vista que a troca de mensagens via rede é feita nos dois sentidos.
Optou-se pela representação dos parâmetros e operações do PDC, que envolvem canais de comunicação, em uma classe denominada C_Conexao. Esta classe tem como principal atribuição gerenciar os protocolos de rede ethernet, que têm por função a função de canal de comunicação da estrutura do SPMS. A Figura 4.8 apresenta o diagrama UML da classe C_Conexao.
Figura 4.8 – Diagrama UML da Classe C_Conexao. Os principais métodos e atributos são:
• PtrPDC: ponteiro para o objeto da classe C_PDC;
• conjunto_sockets: conjunto de sockets monitorados pelo PDC; • PtrFrame: ponteiro para objeto da classe C_Frame;
• Verifica_sockets(): método para verificação da chegada de frames na
interface de rede do computador;
• Cria_socket_4713_UDP(): método de criação do socket de comuni-
cação;
• Envia_frame(): método de envio de dados para equipamentos, via
protocolos de rede.
Esta classe possui apenas um objeto instanciado durante a execu- ção do processo do PDC. Durante o processo de aquisição de dados, todos os pacotes são gerenciados por este objeto, tanto para envio quan- to para recebimento de dados.
Com objetivo de apresentar em maiores detalhes os desenvolvi- mentos aplicados nesta classe, as seções a seguir fazem uma incursão sobre os conceitos utilizados dos protocolos de rede ethernet, bem como os aspectos de funcionalidade levados em consideração.
4.3.5.1 Protocolos de transporte
Os protocolos de rede utilizados no desenvolvimento da classe C_Conexao são fornecidos pela Interface de Programação de Aplicação (API – Application Program Interface) socket.h. Esta biblioteca contém os métodos que possibilitam o software do PDC acionar a interface de rede do computador, a fim de criar um caminho para a troca de dados entre os equipamentos do SPMS.
As ferramentas disponibilizadas pela biblioteca são utilizadas dentro da classe C_Conexao, onde foram desenvolvidos métodos especí-
ficos para atender as necessidades do PDC. Estes métodos procuram ter ampla abrangência, sem distinguir o tipo do objeto que está lhe acionan- do.
A API socket.h é desenvolvida para enviar e receber pacotes de dados em redes de computadores através de protocolos de transporte UDP/IP (User Datagram Protocol/Internet Protocol) e TCP/IP (Trans-
mission Control Protocol/Internet Protocol).
O protocolo UDP/IP é um protocolo de transporte simplificado, tendo por característica a ausência de conexão entre os aplicativos clien- te e servidor, aferindo à transmissão de dados a característica de baixa latência (tempo de envio de dados) em rede. Conseqüentemente, pacotes de dados UDP podem ser perdidos ao longo da transmissão, sem possi- bilidade de recuperação, o que prejudica sua confiabilidade.
Por outro lado, mensagens que utilizam o protocolo TCP/IP rece- bem diversos benefícios do ponto de vista de confiabilidade. Isto se deve pelo fato do estabelecimento efetivo de uma conexão entre proces- so cliente e servidor, garantindo a entrega dos pacotes ao destino e, no caso de perda de dados, existe a possibilidade de solicitar a re- transmissão dos mesmos. A descrição detalhada das características e funcionalidades dos protocolos UDP e TCP está disponível em (STE- VENS, W. R., et al., 2004).
Considerando o escopo de SPMS, dado a alta taxa de amostragem das medidas coletadas no sistema, o volume de dados a ser transmitido é significativo. Desta forma abre-se mão da confiabilidade da entrega de dados ao PDC em detrimento da menor latência na transmissão dos sincrofasores, uma vez que, dependendo das aplicações (por exemplo, controle e/ou proteção), esta pode ser crítica e deve ser minimizada. Unindo estes requisitos com as características dos protocolos de trans- porte, observa-se a aplicabilidade do protocolo UDP/IP no envi- o/recebimento de fasores dentro do SPMS.
A classe C_Conexao foi desenvolvida contemplando a utilização do protocolo UDP/IP. Entretanto sua estrutura permite a inserção das funcionalidades aplicadas ao protocolo TCP/IP, caso necessário. Esta característica permite que o código fonte seja expandido sem necessida- de adaptações nos desenvolvimentos já existentes.
4.3.5.2 Gerenciamento dos dados de rede
Por definição, a classe C_Conexão não processa os formatos de mensagens da norma IEEE C37.118. O tratamento destes formatos é deixado para os métodos das classes C_PMU_PDC e C_PDC_PDC, de acordo com as designações da classe C_PDC. Por sua vez, os objetos
destas classes desconhecem o tratamento dos dados dos protocolos de rede. Por definição, as atribuições da classe C_Conexao limitam-se a realizar a interface entre rede e software, disponibilizando os dados para interpretação e tratamento dos métodos das demais classes do PDC.
Para efetuar início dos protocolos de rede do PDC, é necessária a criação do seu respectivo socket. O socket é a ponte de comunicação entre o sistema operacional do computador com sua interface de rede, e é por onde passam todos os fluxos de dados trocados com os equipa- mentos do SPMS. São atrelados ao socket os seguintes parâmetros: pro- tocolo de transporte (TCP/UDP), endereço IP, porta de comunicação. Este procedimento é realizado pela classe C_PDC, acionando-se o mé- todo C_Conexao::Cria_socket_4713_UDP().
Considerando-se o recebimento de dados pela classe C_Conexao, esta é feita por meio do método C_Conexao::Verifica_sockets(). A cada ciclo de varredura de dados, este método é acionado pelo objeto da clas- se C_PDC e, como resultado, uma lista de frames é disponibilizada. Esta lista contém elementos que são referências para objetos da classe C_Frame. Cada referência é equivalente a um pacote de dados, recebi- dos no socket da interface de rede do PDC. Estes dados são interpreta- dos no escopo da classe C_PDC.
Para a atribuição de envio de dados via os protocolos de rede, um método desenvolvido apenas com essa funcionalidade foi elaborado, denominado C_Conexao::Envia_frame(). Este método contém em seus argumentos os parâmetros necessários para viabilizar o envio de dados, sendo eles: pacote de dados em memória (independente de formato), tamanho do pacote, endereço IP de destino e protocolo de transporte (TCP/UDP). Sendo assim, independente do objeto que executa a cha- mada do método, basta fornecer os parâmetros dentro da forma especifi- cada, que os dados são enviados ao destino especificado.