SlideShare uma empresa Scribd logo
Implementando Smart Grid com Python:
Uma Visão Geral dos desafios e soluções
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
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.
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.
Objetivos
● Integração;
● Interoperabilidade;
● Monitoramento;
● Gerenciamento.
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.
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.
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.
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()
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.
Executar o servidor modbus “fora”
● Implementação simples(<20 linhas de código);
● Quantidade imoral de acessos...
Deixa o S.O.
cuidar dele ;D
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.
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
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...
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...
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
IX Pylestras - SmartGrid com Python
GAMBIARRAS!!!1!!
IX Pylestras - SmartGrid com Python
IX Pylestras - SmartGrid com Python
Chega de me envergonhar...
REUSO DA TÉCNICA
Reutilizar a metodologia
● Smart QUALQUERCOISA
Smart PLANTINHAS?
Definição Estruturação do modelo
do protocolo
SCADA
webservice
Mais informações:
http://paoloo.me/papers.html
PERGUNTAS?
OBRIGADO

Mais conteúdo relacionado

PDF
Single Packet Authorization
PPTX
Se você é .NET, você é NETDUINO - TDC 2013 - Porto Alegre
PDF
Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...
PDF
Internet das Coisas com Python e Arduino
PDF
Protocolos de Sistemas Embarcados
PPTX
PPTX
Internet of Things: The MQTT protocol
PPTX
Criptografia - Redes de Computadores
Single Packet Authorization
Se você é .NET, você é NETDUINO - TDC 2013 - Porto Alegre
Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...
Internet das Coisas com Python e Arduino
Protocolos de Sistemas Embarcados
Internet of Things: The MQTT protocol
Criptografia - Redes de Computadores

Mais procurados (9)

PPTX
Acesso a área de trabalho remota
PDF
Palestra Rafael Correia - O que eu deveria ter aprendido sobre segurança na g...
PPTX
Linux básico
PPTX
ODP
Introdução à Computação de Alto Desempenho - Parte I
PPTX
Síncrono vs Assíncrono
ODP
Introdução à Computação de Alto Desempenho - Parte II
PDF
Mqtt protocolo iot
ODP
Micronaut - modernizando a plataforma Java
Acesso a área de trabalho remota
Palestra Rafael Correia - O que eu deveria ter aprendido sobre segurança na g...
Linux básico
Introdução à Computação de Alto Desempenho - Parte I
Síncrono vs Assíncrono
Introdução à Computação de Alto Desempenho - Parte II
Mqtt protocolo iot
Micronaut - modernizando a plataforma Java
Anúncio

Semelhante a IX Pylestras - SmartGrid com Python (20)

PPTX
Ampliando os Horizontes dos Profissionais de Redes através do Python
PDF
Python e suas aplicações
PDF
PDF
Implementação de Aplicações Móveis e Jogos com Python - Aula 4
PPTX
Congresso iii unifacsv3
PPT
Python no Ensino Superior - PyconBrasil 2
PDF
M2ti - Python Brasil
PPTX
Extreme Experience 2018 | Python para quem sabe Delphi
PDF
Ferment io t - Distributed and Scalable IoT Solution
PPT
Utilizando Python no Ensino Superior - PyConBrasil 3
PDF
O que podemos fazer com Python?
PDF
Implementação de Aplicações Móveis e Jogos com Python - Aula 5
PDF
Congresso iv
PPTX
Coroutine e concorrência python
PPTX
MEO Cloud - Python Lisbon Meetup
KEY
Alex Martelli's Python Design Patterns
PPTX
Aula 2 - IRL
PDF
Arduino + Python: produtividade ao extremo
PDF
FastAPI: Criando microsserviços de alta performance
PDF
Python - Programando em alto nível
Ampliando os Horizontes dos Profissionais de Redes através do Python
Python e suas aplicações
Implementação de Aplicações Móveis e Jogos com Python - Aula 4
Congresso iii unifacsv3
Python no Ensino Superior - PyconBrasil 2
M2ti - Python Brasil
Extreme Experience 2018 | Python para quem sabe Delphi
Ferment io t - Distributed and Scalable IoT Solution
Utilizando Python no Ensino Superior - PyConBrasil 3
O que podemos fazer com Python?
Implementação de Aplicações Móveis e Jogos com Python - Aula 5
Congresso iv
Coroutine e concorrência python
MEO Cloud - Python Lisbon Meetup
Alex Martelli's Python Design Patterns
Aula 2 - IRL
Arduino + Python: produtividade ao extremo
FastAPI: Criando microsserviços de alta performance
Python - Programando em alto nível
Anúncio

Mais de italomaia (6)

PDF
Scraping for fun and glory
PDF
Scraping for fun and glory annotated
PDF
Empty - The Flask Boilerplate
PDF
Conhecendo o pug-ce
PDF
Django Object factory
PDF
Django Tem Ritmo
Scraping for fun and glory
Scraping for fun and glory annotated
Empty - The Flask Boilerplate
Conhecendo o pug-ce
Django Object factory
Django Tem Ritmo

Último (11)

PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
Design - Introdução a Gestalt e teoria das formas
PPTX
Arquitetura de computadores - Memórias Secundárias
PDF
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
PPTX
Utilizando code blockes por andre backes
PDF
Manejo integrado de pragas na cultura do algodão
PPTX
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
PPTX
Viasol Energia Solar -Soluções para geração e economia de energia
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PPTX
Eng. Software - pontos essenciais para o início
PPTX
Tipos de servidor em redes de computador.pptx
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Design - Introdução a Gestalt e teoria das formas
Arquitetura de computadores - Memórias Secundárias
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
Utilizando code blockes por andre backes
Manejo integrado de pragas na cultura do algodão
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
Viasol Energia Solar -Soluções para geração e economia de energia
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Eng. Software - pontos essenciais para o início
Tipos de servidor em redes de computador.pptx

IX Pylestras - SmartGrid com Python

  • 1. Implementando Smart Grid com Python: Uma Visão Geral dos desafios e soluções
  • 2. 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
  • 3. 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.
  • 4. 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.
  • 6. 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.
  • 7. 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.
  • 8. 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.
  • 9. 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()
  • 10. 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.
  • 11. Executar o servidor modbus “fora” ● Implementação simples(<20 linhas de código); ● Quantidade imoral de acessos... Deixa o S.O. cuidar dele ;D
  • 12. 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.
  • 14. 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
  • 15. 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...
  • 17. 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...
  • 18. 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
  • 23. Chega de me envergonhar...
  • 25. Reutilizar a metodologia ● Smart QUALQUERCOISA
  • 27. SCADA