ix pylestras - smartgrid com python

31
Implementando Smart Grid com Python: Uma Visão Geral dos desafios e soluções

Upload: italomaia

Post on 04-Aug-2015

169 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: IX Pylestras - SmartGrid com Python

Implementando Smart Grid com Python: Uma Visão Geral dos desafios e soluções

Page 2: IX Pylestras - SmartGrid com Python

Quem sou eu?

● Paolo Oliveira● Engenharia de Telecomunicações – IFCE● LIT – Laboratório de Inovação Tecnológica● Usuário python a uma década

Page 3: IX Pylestras - SmartGrid com Python

Smart Grid

● Aplicação de conceitos de rede eletrica distruibuida inteligente, que pode monitorar seu próprio fluxo eletrico e se ajustar as condições adversas, reconfigurando os dispositivos que a compõe através da automação e integração de todos os elementos da rede. E para tal, é necessário haver comunicação entre elementos que acompoem.

Page 4: IX Pylestras - SmartGrid com Python

Problemas do Mundo Real

● Infinidade de Protocolos de Comunicação, muitos deles fechados (embora existam os abertos e bem conhecidos como DNP3, Modbus e IEC61850);

● Rede Elétrica "analógica" (poucos ou nenhum equipamento inteligente disponível);

● Conectividade complexa em locais distantes (geralmente restrito ao GPRS);

● Etc.

Page 5: IX Pylestras - SmartGrid com Python

Objetivos

● Integração;● Interoperabilidade;● Monitoramento;● Gerenciamento.

Page 6: IX Pylestras - SmartGrid com Python

SCADA

Supervisory Control And Data Acquisition● Melhor forma de gerenciar.

Entretanto...● Licenças “estupidamente” caras e individuais para

cada conexão;● Só “fala” protocolos conhecidos e/ou abertos.

Page 7: IX Pylestras - SmartGrid com Python

Solução

● Gateway integrador, decodificando os protocolos, abertos e fechados, e traduzindo-os entre si, permitindo interoperabilidade, ao passo em que que fornece acesso a monitoramento e gerenciamento industrial através do SCADA, e de forma genérica através de webservice.

Page 8: IX Pylestras - SmartGrid com Python

Necessidades na implementação da Solução

● Garantia na execução de código em intervalos de tempo finitos bem definidos;

● Facilidade em codificar e decodificar protocolos proprietarios(parsing e validação de estruturas);

● Gerenciamento eficaz e simples de comunicação serial e TCP/IP.

Page 9: IX Pylestras - SmartGrid com Python

Garantia na execução de código em intervalos de tempo finitos bem

definidos● Criação de um “watchdog” com a biblioteca thread● No construtor:

self.watchdog = threading.Timer(0.2, self.WDT)

self.watchdog.start()● No método WDT:

def WDT(self):● self.watchdog.cancel()

(…) # chamadas a serem executadas

self.watchdog = threading.Timer(0.2, self.WDT)

self.watchdog.start()

Page 10: IX Pylestras - SmartGrid com Python

Garantia na execução de código em intervalos de tempo finitos bem

definidos● Iniciar todos os modulos via thread:

if __name__=='__main__':

threading.Thread(target=thread_modbus).start()

threading.Thread(target=thread_ws).start()

…● Com isto, eu garantia meu código lendo o pool

Modbus a cada 0.2 segundos, tempo limite para desarmar a rede elétrica de baixa tensão.

Page 11: IX Pylestras - SmartGrid com Python

Executar o servidor modbus “fora”

● Implementação simples(<20 linhas de código);● Quantidade imoral de acessos...

Deixa o S.O.

cuidar dele ;D

Page 12: IX Pylestras - SmartGrid com Python

Facilidade em codificar e decodificar protocolos proprietarios

Design de uma forma genérica de escrever protocolos:● Definir todos os campos do frame como variáveis globais.● Criar um método encode() que le as variaveis globais e “monta” o

pacote, computando tamanhos e CRC;● Criar um método decode() que pega um frame e o decodifica,

liberando os valores nas variaveis globais;● Uso massivo do pack e unpack da bibliteca struct;● Fácil de trabalhar, fácil de fazer um novo, e sem necessidade de

mexer com o módulo parental, que so se importa em chamar encode() e decode() dos módulos de cada protocolo.

Page 13: IX Pylestras - SmartGrid com Python
Page 14: IX Pylestras - SmartGrid com Python

Gerenciamento eficaz e simples de comunicação serial e TCP/IP

● Bom, é python... Com os já muito bons modelos de gerenciamento de conexão, unindo os métodos de conexão e leitura dentro de um try/except/else/finally, o sistema fica completamente estável.

● Lembrar de sempre usar o

allow_reuse_address = True

para evitar dor de cabeça

Page 15: IX Pylestras - SmartGrid com Python

Nem tudo são flores

● São valores enormes e dados que o python, por padrão, não sabe lidar. Então mesmo depois de entender os protocolos, é preciso converter os dados para usá-los de alguma forma. E, digamos que não é a coisa mais fácil do mundo...

Page 16: IX Pylestras - SmartGrid com Python
Page 17: IX Pylestras - SmartGrid com Python

E ainda assim, tem vezes que o python sozinho não dá conta, ou demoraria muito

para “pythonizar” a solução.

Para ester momentos, nos temos...

Page 18: IX Pylestras - SmartGrid com Python

CTYPES + muita coragem

● ctypes é a cola perfeita, mas ainda assim dá muito trabalho;

● Muita coisa velha é feita em PIC, não existe documentação do protocolo/funções;

● Converter código de PIC para python doi.

EXEMPLO

Page 19: IX Pylestras - SmartGrid com Python
Page 20: IX Pylestras - SmartGrid com Python

GAMBIARRAS!!!1!!

Page 21: IX Pylestras - SmartGrid com Python
Page 22: IX Pylestras - SmartGrid com Python
Page 23: IX Pylestras - SmartGrid com Python

Chega de me envergonhar...

Page 24: IX Pylestras - SmartGrid com Python

REUSO DA TÉCNICA

Page 25: IX Pylestras - SmartGrid com Python

Reutilizar a metodologia

● Smart QUALQUERCOISA

Page 26: IX Pylestras - SmartGrid com Python

Smart PLANTINHAS?

Definição Estruturação do modelo

do protocolo

Page 27: IX Pylestras - SmartGrid com Python

SCADA

Page 28: IX Pylestras - SmartGrid com Python

webservice

Page 29: IX Pylestras - SmartGrid com Python

Mais informações:http://paoloo.me/papers.html

Page 30: IX Pylestras - SmartGrid com Python

PERGUNTAS?

Page 31: IX Pylestras - SmartGrid com Python

OBRIGADO