Download - IX Pylestras - SmartGrid com Python
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.
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...
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
GAMBIARRAS!!!1!!
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