SlideShare una empresa de Scribd logo
1 de 24
Descargar para leer sin conexión
Automatização com Python de Listas de
       Pontos para Subestações do Setor Elétrico




1/24                                         Hugo Salvador – 15/09/2012
Contextualização


              Programa LP Scripts


       Como o Python facilitou minha vida



2/24                                        Hugo Salvador – 15/09/2012
Sistema Elétrico

          Usina de Geração




                                          Linha de Distribuição



         Linha de
       Transmissão


                             Subestação




3/24                                                 Hugo Salvador – 15/09/2012
Lista de Pontos
       Planilha Excel com lista dos ponto de supervisão e comando que trafegam
       entre IEDs (Intelligent Electronic Device) e o Sistema Supervisório (SCADA -
       Supervisory Control and Data Acquisition).
                                                            Supervisório




                                                                      Rede Ethernet



                                                                IED        Computador Controlador




                                                                                  Equipamentos de Alta Tensão



4/24                                                                                        Hugo Salvador – 15/09/2012
Supervisório
       SAGE – Tela de Diagrama Unifilar




5/24                                      Hugo Salvador – 15/09/2012
Supervisório
       SAGE – Tela de Alarmes e Comandos




6/24                                       Hugo Salvador – 15/09/2012
Supervisório
       SAGE – Tela de Lista de Alarmes




7/24                                     Hugo Salvador – 15/09/2012
Programa LP Scripts




8/24                         Hugo Salvador – 15/09/2012
LP Scripts


            LP        NSIS
          Scripts

        Bibliotecas
        LP Scripts

         Módulos

        xlrd e xlwt


        Python 2.7



9/24                         Hugo Salvador – 15/09/2012
LP_Config                    Entrada de Dados                     LP Padrão
                                     (xls)                                                             (xls)



                                                               LP Scripts.pywc
          gerarPlanilha .pyc
                                       Inicia Função                                    Inicia Função



        Usa Função
                               Gerar_LP .pyc                                                      Checar_LP .pyc

                                                                   LP .pyc
                                               Usa Função                         Usa Função
                                               Retorna Array                      Retorna Array


                                                                  func.pyc




                                LP_gerada                                                            Relatório
                                   (xls)                                                               (xls)




10/24                                                                                                              Hugo Salvador – 15/09/2012
Vamos à prática


11/24           Hugo Salvador – 15/09/2012
Como o Python facilitou
              minha vida



12/24                             Hugo Salvador – 15/09/2012
Pacotes Python Utilizados
         Tkinter             (Janela Principal e Janela Sobre)
         tkMessageBox        (Mensagens de informação)
         tkFileDialog        (Indicar arquivo)
         os                  (verificação de arquivos)
         String              (replace, split e find)
         Array               (ichi!!!)


         xlrd                (Leitura de arquivo Excel)
         xlwt                (Geração de arquivo Excel)
                    http://www.python-excel.org/
13/24                                                             Hugo Salvador – 15/09/2012
Tkinter

                   frmE                         frmD
class Janela:
                             frm11                        frm12
    ...




# FRAME "Arquivo LP Padrao"-------------------------------------
self.frm11 = LabelFrame(self.frmE, text=u'Arquivo LP Padrão', 
                        height = frmaltura, width = frmLargura)
                             frm21
self.frm11.grid(row=1, column=1, padx=3, pady=3)

self.nomeArquivo = Label(self.frm11, 
                              text=self.caminhoArquivoLP_Padrao)
                             frm31
self.nomeArquivo.grid(row=1, column=1)

self.btEscolheArq = Button(self.frm11, text='Selecionar',
                          bg='#E0E0E0', width=frmLargura/8, 
                         command=self.btEscolheArqClick)
self.btEscolheArq.grid(row=2,frm41
                               column=1, sticky=N+E+S+W, pady=2, padx=10)
    ...




14/24                                                             Hugo Salvador – 15/09/2012
Tkinter e tkFileDialog
    ...




  def btEscolheArqClick (self):
         temp=askopenfilename(filetypes=[('Arquivo do Excel','xls')])
         if (temp!=''):
             self.caminhoArquivoLP_Padrao = temp
             self.nomeArquivo['text'] = path.basename(temp)
    ...




app=Tk()                             # Instância do Tk (janela principal)
app.title(‘LP Script’)               # Título da janela
try:
     app.iconbitmap(default='chesf.ico‘) # Ícone utilizado pela janela
except:
     pass
app.resizable(0,0)
Janela(app)
app.mainloop()




15/24                                                          Hugo Salvador – 15/09/2012
tkMessageBox
try:
    from xlrd import open_workbook
except:
    tkMessageBox.showerror('Erro',u'Modulo xlrd não instalado')

try:
    from lp_lib.Gerar_LP import gerar
except:
    tkMessageBox.showerror('Erro',u'Módulo Gerar não instalado')
        ...




tkMessageBox.showinfo('Aviso',
                       u'Arquivo "'+nome+'" gerado em'+os.getcwd())




16/24                                                          Hugo Salvador – 15/09/2012
Array e xlrd
        from xlrd import open_workbook
        arq_conf = open_workbook('LP_config.xls')
        sheet = arq_conf.sheet_by_index(0)

        conf_LT_array=[]        #Configuração de LT

        index_linha=18
        while sheet.cell(index_linha,0).value:
                                      # 0 - Código operacional LT Ex. 04V1
                conf_LT_array.append([sheet.cell(index_linha,0).value.upper(),
                                      # 1 - Nome do painel Ex. 4UA2A
                                      sheet.cell(index_linha,1).value.upper(),
                                      # 2 - Tem 87L (Sim ou Não)
                                      sheet.cell(index_linha,2).value,
                                      # 3 - Religamento
                                      sheet.cell(index_linha,3).value,
                                      # 4 - Código LT Remota Ex. NTT
                                      sheet.cell(index_linha,4).value.upper(),
                                      # 5 - Arranjo
                                      sheet.cell(index_linha,5).value])
        .
        .
        .

        for parametros_LT in conf_LT_array:
        .
        .
        .
17/24                                                               Hugo Salvador – 15/09/2012
Array

        • array_validar_ID=[col[0] for col in array_validar]

        • array_checar=[tag[-11:] for tag in array_ID]
         #Separar as últimas 11 posições (Painel e código de ponto)

        • pos11dupl=[dupl11 for dupl11 in set(array_checar) 
                    if array_checar.count(dupl11)>1 and dupl11[:3]=='2UA’]



        • if endereco not in endduplicado_array:


        • parametros = conf_LT_array + conf_Trafo_array + conf_BT_array +
                      conf_Reator_array + conf_TT_array + conf_BCap_array
                       # Soma de Array

        • saida_array.sort()



18/24                                                                 Hugo Salvador – 15/09/2012
Array e xlwt

        from xlwt import Workbook

        arq_Relatorio = Workbook()

        planilha_problema= arq_Relatorio.add_sheet('Problema')

        array_titulo=['ID (SAGE)‘,'OCR (SAGE)‘, u'DESCRIÇÃO‘,'TIPO',
                          'COMANDO‘, u'MEDIÇÃO‘, 'ANUNCIADOR',
                          'LISTA DE ALARMES‘, 'SOE']

        coluna=0
        for titulo in array_titulo:
            planilha_problema.write(0,coluna,titulo)
            coluna+=1



        for titulo in array_titulo:
            planilha_problema.write (0,array_titulo.index(titulo),titulo)


19/24                                                                  Hugo Salvador – 15/09/2012
String

             ZZZ:0YYY:[F1/F2]:RAUT                 PRS:04L1:F1:RAUT



        tratar=string.replace(tratar_array[0],'ZZZ',Codigo_SE)
        tratar_1=string.replace(tratar,'0YYY',parametros_LT[0])




        tratar_IdSage=tratar_array[0].split('/')
        ied0=unicode(tratar_IdSage[0][-2:])
        ied1=unicode(tratar_IdSage[1][:2])




20/24                                                                 Hugo Salvador – 15/09/2012
String
   arq_LP = gerarPlanilha()

   nome_arq='./LP_gerada.xls’
   seq_arq=0
   while os.path.exists(nome_arq):
            seq_arq+=1
           nome_arq=nome_arq[0:11]+'_'+str(seq_arq)+’.xls’
   arq_LP.save(nome_arq_saida[2:])




   if (descricao.find('87L')>=0:
                                                    descricao
   .
   .
   .                                   ‘Trip Relé Diferencial 87L Fase A’

   if int(parametros_LT[1][0])>3:                parametros_LT
   .
   .
   .                                   [‘04L1’,’4UA2A’,’Sim’,’Tripolar’,...]
21/24                                                              Hugo Salvador – 15/09/2012
Equação Booleana


  cd1 = tratar.find('F3')<0 or (tratar.find('F3')>-1 and 
          (parametros_Trafo[6]=='PU/PG'))
  cd2 = ...
  cd3 = ...
  cd4 = ...
  cd5 = ...
  cd6 = ...
  cd7 = ...

  if (cd1+cd2)*cd3*cd4*cd5*cd6*cd7:
          .
          .
          .




22/24                                                        Hugo Salvador – 15/09/2012
Mais coisas legais

        • Vários IDEs disponíveis (Coisas simples uso Idle, se complicar uso Eclipse + PyDev)

        • Linguagem Interpretada, mas compilada! (Distribuição do software com arquivos
        compilados)

        • Interpretador dinâmico (faça test-drive antes de usar a função, programar com Idle
        aberto)

        • Vasto material de referência e códigos na Internet (programar com browser aberto)

        • Pode-se programar em Python para Desktop, Web ou Celular (LP Scripts pode passar
        do Desktop para Intranet)

        • Estrutura fácil, muito material de consulta disponível... Se consegue desenvolver
        programa de forma prazerosa e com facilidade



23/24                                                                                    Hugo Salvador – 15/09/2012
Coordenador do Projeto
  Hugo Everaldo Salvador Bezerra
  Chesf/DEEC

                                     Obrigado!
  Co autores
  Fábio André da Silva             Hugo Everaldo Salvador Bezerra
  Chesf/DEEC
                                              hugos@chesf.gov.br
  Jose Geraldo da Silva Júnior                  +55 81 3229 3221
  Chesf/DOMO




24/24                                                      Hugo Salvador – 15/09/2012

Más contenido relacionado

La actualidad más candente

La actualidad más candente (19)

Scheme
SchemeScheme
Scheme
 
Estrutura de Dados - PILHAS
Estrutura de Dados - PILHASEstrutura de Dados - PILHAS
Estrutura de Dados - PILHAS
 
Apostila rpira
Apostila rpiraApostila rpira
Apostila rpira
 
Estrutura de dados - Pilhas
Estrutura de dados - PilhasEstrutura de dados - Pilhas
Estrutura de dados - Pilhas
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
 
2 funcoes e estrutura de blocos
2   funcoes e estrutura de blocos2   funcoes e estrutura de blocos
2 funcoes e estrutura de blocos
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcional
 
Introdução ao paradigma funcional com scala
Introdução ao paradigma funcional com scalaIntrodução ao paradigma funcional com scala
Introdução ao paradigma funcional com scala
 
10 alocacao dinamica - listas ligadas
10   alocacao dinamica - listas ligadas10   alocacao dinamica - listas ligadas
10 alocacao dinamica - listas ligadas
 
Estrutura de dados - Filas
Estrutura de dados - FilasEstrutura de dados - Filas
Estrutura de dados - Filas
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Canivete shell
Canivete shellCanivete shell
Canivete shell
 
Programas auxiliares
Programas auxiliaresProgramas auxiliares
Programas auxiliares
 
Estrutura de dados em Java - Pilhas
Estrutura de dados em Java - PilhasEstrutura de dados em Java - Pilhas
Estrutura de dados em Java - Pilhas
 
Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3
 
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
 
Programação-Aula004
Programação-Aula004Programação-Aula004
Programação-Aula004
 
Programando em python funcoes
Programando em python   funcoesProgramando em python   funcoes
Programando em python funcoes
 
Php Math and arrays
Php Math and arraysPhp Math and arrays
Php Math and arrays
 

Destacado

XIX PUG-PE - Pygame game development
XIX PUG-PE - Pygame game developmentXIX PUG-PE - Pygame game development
XIX PUG-PE - Pygame game developmentmatheuscmpm
 
E o que danado é o PUG-PE?
E o que danado é o PUG-PE?E o que danado é o PUG-PE?
E o que danado é o PUG-PE?pugpe
 
E dá para desenvolver webgames com Django?
E dá para desenvolver webgames com Django?E dá para desenvolver webgames com Django?
E dá para desenvolver webgames com Django?Guilherme Medeiros
 
[2012] XIX PUGPE - Projeto Amadeus
[2012] XIX PUGPE -  Projeto Amadeus[2012] XIX PUGPE -  Projeto Amadeus
[2012] XIX PUGPE - Projeto AmadeusThiago
 
Palestra Institucional PUG-PE
Palestra Institucional PUG-PEPalestra Institucional PUG-PE
Palestra Institucional PUG-PEMarcel Caraciolo
 
Mini-Curso de Python dia 21/03 (Segunda-Feira) no II Workshop de SL do CIN/UFPE
Mini-Curso de Python dia 21/03 (Segunda-Feira) no II Workshop de SL do CIN/UFPEMini-Curso de Python dia 21/03 (Segunda-Feira) no II Workshop de SL do CIN/UFPE
Mini-Curso de Python dia 21/03 (Segunda-Feira) no II Workshop de SL do CIN/UFPEMarcel Caraciolo
 
Suporte a macros na sua aplicação com PowerShell
Suporte a macros na sua aplicação com PowerShellSuporte a macros na sua aplicação com PowerShell
Suporte a macros na sua aplicação com PowerShellIgor Abade
 
Acelere - e melhore! - o feedback com testes automatizados rápidos
Acelere - e melhore! - o feedback com testes automatizados rápidosAcelere - e melhore! - o feedback com testes automatizados rápidos
Acelere - e melhore! - o feedback com testes automatizados rápidosIgor Abade
 
Tdd not sure if testing or developing
Tdd  not sure if testing or developingTdd  not sure if testing or developing
Tdd not sure if testing or developingRenato Oliveira
 
TDC2016SP - Flask para Web
TDC2016SP - Flask para WebTDC2016SP - Flask para Web
TDC2016SP - Flask para Webtdc-globalcode
 
TDC2016SP - Luiza Labs - Migrando .NET p/ Python
TDC2016SP - Luiza Labs - Migrando .NET p/ PythonTDC2016SP - Luiza Labs - Migrando .NET p/ Python
TDC2016SP - Luiza Labs - Migrando .NET p/ Pythontdc-globalcode
 
Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)
Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)
Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)Igor Abade
 
Python, A pílula Azul da programação
Python, A pílula Azul da programaçãoPython, A pílula Azul da programação
Python, A pílula Azul da programaçãoMarcel Caraciolo
 
Devcommerce 2016: Migração plataforma Magazine Luiza e seu laboratório de in...
Devcommerce 2016: Migração plataforma Magazine Luiza e seu  laboratório de in...Devcommerce 2016: Migração plataforma Magazine Luiza e seu  laboratório de in...
Devcommerce 2016: Migração plataforma Magazine Luiza e seu laboratório de in...André Fatala
 
Pyjamas: Uma Ferramenta Pythônica para Web
Pyjamas: Uma Ferramenta Pythônica para WebPyjamas: Uma Ferramenta Pythônica para Web
Pyjamas: Uma Ferramenta Pythônica para WebNielson Santana
 
Wikilytics
WikilyticsWikilytics
Wikilyticspugpe
 
Apresentando o I Toró de Palestras do PUG-PE
Apresentando o I Toró de Palestras do PUG-PEApresentando o I Toró de Palestras do PUG-PE
Apresentando o I Toró de Palestras do PUG-PEMarcel Caraciolo
 

Destacado (20)

XIX PUG-PE - Pygame game development
XIX PUG-PE - Pygame game developmentXIX PUG-PE - Pygame game development
XIX PUG-PE - Pygame game development
 
E o que danado é o PUG-PE?
E o que danado é o PUG-PE?E o que danado é o PUG-PE?
E o que danado é o PUG-PE?
 
E dá para desenvolver webgames com Django?
E dá para desenvolver webgames com Django?E dá para desenvolver webgames com Django?
E dá para desenvolver webgames com Django?
 
[2012] XIX PUGPE - Projeto Amadeus
[2012] XIX PUGPE -  Projeto Amadeus[2012] XIX PUGPE -  Projeto Amadeus
[2012] XIX PUGPE - Projeto Amadeus
 
Palestra Institucional PUG-PE
Palestra Institucional PUG-PEPalestra Institucional PUG-PE
Palestra Institucional PUG-PE
 
Mini-Curso de Python dia 21/03 (Segunda-Feira) no II Workshop de SL do CIN/UFPE
Mini-Curso de Python dia 21/03 (Segunda-Feira) no II Workshop de SL do CIN/UFPEMini-Curso de Python dia 21/03 (Segunda-Feira) no II Workshop de SL do CIN/UFPE
Mini-Curso de Python dia 21/03 (Segunda-Feira) no II Workshop de SL do CIN/UFPE
 
Suporte a macros na sua aplicação com PowerShell
Suporte a macros na sua aplicação com PowerShellSuporte a macros na sua aplicação com PowerShell
Suporte a macros na sua aplicação com PowerShell
 
Acelere - e melhore! - o feedback com testes automatizados rápidos
Acelere - e melhore! - o feedback com testes automatizados rápidosAcelere - e melhore! - o feedback com testes automatizados rápidos
Acelere - e melhore! - o feedback com testes automatizados rápidos
 
Com vocês, Django!
Com vocês, Django!Com vocês, Django!
Com vocês, Django!
 
Tdd not sure if testing or developing
Tdd  not sure if testing or developingTdd  not sure if testing or developing
Tdd not sure if testing or developing
 
W2py pyconpe
W2py pyconpeW2py pyconpe
W2py pyconpe
 
TDC2016SP - Flask para Web
TDC2016SP - Flask para WebTDC2016SP - Flask para Web
TDC2016SP - Flask para Web
 
TDC2016SP - Luiza Labs - Migrando .NET p/ Python
TDC2016SP - Luiza Labs - Migrando .NET p/ PythonTDC2016SP - Luiza Labs - Migrando .NET p/ Python
TDC2016SP - Luiza Labs - Migrando .NET p/ Python
 
Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)
Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)
Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)
 
Python, A pílula Azul da programação
Python, A pílula Azul da programaçãoPython, A pílula Azul da programação
Python, A pílula Azul da programação
 
Devcommerce 2016: Migração plataforma Magazine Luiza e seu laboratório de in...
Devcommerce 2016: Migração plataforma Magazine Luiza e seu  laboratório de in...Devcommerce 2016: Migração plataforma Magazine Luiza e seu  laboratório de in...
Devcommerce 2016: Migração plataforma Magazine Luiza e seu laboratório de in...
 
Pyjamas: Uma Ferramenta Pythônica para Web
Pyjamas: Uma Ferramenta Pythônica para WebPyjamas: Uma Ferramenta Pythônica para Web
Pyjamas: Uma Ferramenta Pythônica para Web
 
Wikilytics
WikilyticsWikilytics
Wikilytics
 
Apresentando o I Toró de Palestras do PUG-PE
Apresentando o I Toró de Palestras do PUG-PEApresentando o I Toró de Palestras do PUG-PE
Apresentando o I Toró de Palestras do PUG-PE
 
Arduino e python
Arduino e pythonArduino e python
Arduino e python
 

Similar a Lp script pug-pe

Otimizações em Sistemas de Armazenamento mediadas por anotações em Metadados
Otimizações em Sistemas de Armazenamento mediadas por anotações em MetadadosOtimizações em Sistemas de Armazenamento mediadas por anotações em Metadados
Otimizações em Sistemas de Armazenamento mediadas por anotações em Metadadosricardoas
 
ASP.Net Módulo 2
ASP.Net   Módulo 2ASP.Net   Módulo 2
ASP.Net Módulo 2michellobo
 
Sistemas logicos programaveis
Sistemas logicos programaveisSistemas logicos programaveis
Sistemas logicos programaveislaritha
 
Lógica de programação pascal
Lógica de programação   pascalLógica de programação   pascal
Lógica de programação pascalJocelma Rios
 
Operadores de redirecionamento
Operadores de redirecionamentoOperadores de redirecionamento
Operadores de redirecionamentoIvani Nascimento
 
PL/Python: Programando em Python no PostgreSQL
PL/Python: Programando em Python no PostgreSQLPL/Python: Programando em Python no PostgreSQL
PL/Python: Programando em Python no PostgreSQLJuliano Atanazio
 
Curso matlab 6 especiais
Curso matlab 6 especiaisCurso matlab 6 especiais
Curso matlab 6 especiaisJosh Santos
 
Sistemas operacionais de rede exercicio de sala
Sistemas operacionais de rede exercicio de salaSistemas operacionais de rede exercicio de sala
Sistemas operacionais de rede exercicio de salaCarlos Melo
 
Manual UFCD 0839.pptx
Manual UFCD 0839.pptxManual UFCD 0839.pptx
Manual UFCD 0839.pptxFormador2
 
Introdução ao SystemTap - João Avelino Bellomo Filho - Tchelinux Caxias 2018
Introdução ao SystemTap - João Avelino Bellomo Filho - Tchelinux Caxias 2018Introdução ao SystemTap - João Avelino Bellomo Filho - Tchelinux Caxias 2018
Introdução ao SystemTap - João Avelino Bellomo Filho - Tchelinux Caxias 2018Tchelinux
 
Introdução ao processamento paralelo com o Grand Central Dispatch
Introdução ao processamento paralelo com o Grand Central DispatchIntrodução ao processamento paralelo com o Grand Central Dispatch
Introdução ao processamento paralelo com o Grand Central Dispatchflisolmaringa
 

Similar a Lp script pug-pe (20)

Palestra cbq
Palestra cbqPalestra cbq
Palestra cbq
 
Palestra2009
Palestra2009Palestra2009
Palestra2009
 
Otimizações em Sistemas de Armazenamento mediadas por anotações em Metadados
Otimizações em Sistemas de Armazenamento mediadas por anotações em MetadadosOtimizações em Sistemas de Armazenamento mediadas por anotações em Metadados
Otimizações em Sistemas de Armazenamento mediadas por anotações em Metadados
 
ASP.Net Módulo 2
ASP.Net   Módulo 2ASP.Net   Módulo 2
ASP.Net Módulo 2
 
Sistemas logicos programaveis
Sistemas logicos programaveisSistemas logicos programaveis
Sistemas logicos programaveis
 
Lógica de programação pascal
Lógica de programação   pascalLógica de programação   pascal
Lógica de programação pascal
 
Ud2
Ud2Ud2
Ud2
 
Operadores de redirecionamento
Operadores de redirecionamentoOperadores de redirecionamento
Operadores de redirecionamento
 
PL/Python: Programando em Python no PostgreSQL
PL/Python: Programando em Python no PostgreSQLPL/Python: Programando em Python no PostgreSQL
PL/Python: Programando em Python no PostgreSQL
 
Latex - Minicurso Básico
Latex - Minicurso BásicoLatex - Minicurso Básico
Latex - Minicurso Básico
 
Curso matlab 6 especiais
Curso matlab 6 especiaisCurso matlab 6 especiais
Curso matlab 6 especiais
 
Sistemas operacionais de rede exercicio de sala
Sistemas operacionais de rede exercicio de salaSistemas operacionais de rede exercicio de sala
Sistemas operacionais de rede exercicio de sala
 
C 1
C 1C 1
C 1
 
Academia ABAP
Academia  ABAPAcademia  ABAP
Academia ABAP
 
Rs logix 5000
Rs logix 5000Rs logix 5000
Rs logix 5000
 
Pesquisa ppi 2
Pesquisa ppi 2Pesquisa ppi 2
Pesquisa ppi 2
 
Aula2
Aula2Aula2
Aula2
 
Manual UFCD 0839.pptx
Manual UFCD 0839.pptxManual UFCD 0839.pptx
Manual UFCD 0839.pptx
 
Introdução ao SystemTap - João Avelino Bellomo Filho - Tchelinux Caxias 2018
Introdução ao SystemTap - João Avelino Bellomo Filho - Tchelinux Caxias 2018Introdução ao SystemTap - João Avelino Bellomo Filho - Tchelinux Caxias 2018
Introdução ao SystemTap - João Avelino Bellomo Filho - Tchelinux Caxias 2018
 
Introdução ao processamento paralelo com o Grand Central Dispatch
Introdução ao processamento paralelo com o Grand Central DispatchIntrodução ao processamento paralelo com o Grand Central Dispatch
Introdução ao processamento paralelo com o Grand Central Dispatch
 

Lp script pug-pe

  • 1. Automatização com Python de Listas de Pontos para Subestações do Setor Elétrico 1/24 Hugo Salvador – 15/09/2012
  • 2. Contextualização Programa LP Scripts Como o Python facilitou minha vida 2/24 Hugo Salvador – 15/09/2012
  • 3. Sistema Elétrico Usina de Geração Linha de Distribuição Linha de Transmissão Subestação 3/24 Hugo Salvador – 15/09/2012
  • 4. Lista de Pontos Planilha Excel com lista dos ponto de supervisão e comando que trafegam entre IEDs (Intelligent Electronic Device) e o Sistema Supervisório (SCADA - Supervisory Control and Data Acquisition). Supervisório Rede Ethernet IED Computador Controlador Equipamentos de Alta Tensão 4/24 Hugo Salvador – 15/09/2012
  • 5. Supervisório SAGE – Tela de Diagrama Unifilar 5/24 Hugo Salvador – 15/09/2012
  • 6. Supervisório SAGE – Tela de Alarmes e Comandos 6/24 Hugo Salvador – 15/09/2012
  • 7. Supervisório SAGE – Tela de Lista de Alarmes 7/24 Hugo Salvador – 15/09/2012
  • 8. Programa LP Scripts 8/24 Hugo Salvador – 15/09/2012
  • 9. LP Scripts LP NSIS Scripts Bibliotecas LP Scripts Módulos xlrd e xlwt Python 2.7 9/24 Hugo Salvador – 15/09/2012
  • 10. LP_Config Entrada de Dados LP Padrão (xls) (xls) LP Scripts.pywc gerarPlanilha .pyc Inicia Função Inicia Função Usa Função Gerar_LP .pyc Checar_LP .pyc LP .pyc Usa Função Usa Função Retorna Array Retorna Array func.pyc LP_gerada Relatório (xls) (xls) 10/24 Hugo Salvador – 15/09/2012
  • 11. Vamos à prática 11/24 Hugo Salvador – 15/09/2012
  • 12. Como o Python facilitou minha vida 12/24 Hugo Salvador – 15/09/2012
  • 13. Pacotes Python Utilizados  Tkinter (Janela Principal e Janela Sobre)  tkMessageBox (Mensagens de informação)  tkFileDialog (Indicar arquivo)  os (verificação de arquivos)  String (replace, split e find)  Array (ichi!!!)  xlrd (Leitura de arquivo Excel)  xlwt (Geração de arquivo Excel) http://www.python-excel.org/ 13/24 Hugo Salvador – 15/09/2012
  • 14. Tkinter frmE frmD class Janela: frm11 frm12 ... # FRAME "Arquivo LP Padrao"------------------------------------- self.frm11 = LabelFrame(self.frmE, text=u'Arquivo LP Padrão', height = frmaltura, width = frmLargura) frm21 self.frm11.grid(row=1, column=1, padx=3, pady=3) self.nomeArquivo = Label(self.frm11, text=self.caminhoArquivoLP_Padrao) frm31 self.nomeArquivo.grid(row=1, column=1) self.btEscolheArq = Button(self.frm11, text='Selecionar', bg='#E0E0E0', width=frmLargura/8, command=self.btEscolheArqClick) self.btEscolheArq.grid(row=2,frm41 column=1, sticky=N+E+S+W, pady=2, padx=10) ... 14/24 Hugo Salvador – 15/09/2012
  • 15. Tkinter e tkFileDialog ... def btEscolheArqClick (self): temp=askopenfilename(filetypes=[('Arquivo do Excel','xls')]) if (temp!=''): self.caminhoArquivoLP_Padrao = temp self.nomeArquivo['text'] = path.basename(temp) ... app=Tk() # Instância do Tk (janela principal) app.title(‘LP Script’) # Título da janela try: app.iconbitmap(default='chesf.ico‘) # Ícone utilizado pela janela except: pass app.resizable(0,0) Janela(app) app.mainloop() 15/24 Hugo Salvador – 15/09/2012
  • 16. tkMessageBox try: from xlrd import open_workbook except: tkMessageBox.showerror('Erro',u'Modulo xlrd não instalado') try: from lp_lib.Gerar_LP import gerar except: tkMessageBox.showerror('Erro',u'Módulo Gerar não instalado') ... tkMessageBox.showinfo('Aviso', u'Arquivo "'+nome+'" gerado em'+os.getcwd()) 16/24 Hugo Salvador – 15/09/2012
  • 17. Array e xlrd from xlrd import open_workbook arq_conf = open_workbook('LP_config.xls') sheet = arq_conf.sheet_by_index(0) conf_LT_array=[] #Configuração de LT index_linha=18 while sheet.cell(index_linha,0).value: # 0 - Código operacional LT Ex. 04V1 conf_LT_array.append([sheet.cell(index_linha,0).value.upper(), # 1 - Nome do painel Ex. 4UA2A sheet.cell(index_linha,1).value.upper(), # 2 - Tem 87L (Sim ou Não) sheet.cell(index_linha,2).value, # 3 - Religamento sheet.cell(index_linha,3).value, # 4 - Código LT Remota Ex. NTT sheet.cell(index_linha,4).value.upper(), # 5 - Arranjo sheet.cell(index_linha,5).value]) . . . for parametros_LT in conf_LT_array: . . . 17/24 Hugo Salvador – 15/09/2012
  • 18. Array • array_validar_ID=[col[0] for col in array_validar] • array_checar=[tag[-11:] for tag in array_ID] #Separar as últimas 11 posições (Painel e código de ponto) • pos11dupl=[dupl11 for dupl11 in set(array_checar) if array_checar.count(dupl11)>1 and dupl11[:3]=='2UA’] • if endereco not in endduplicado_array: • parametros = conf_LT_array + conf_Trafo_array + conf_BT_array + conf_Reator_array + conf_TT_array + conf_BCap_array # Soma de Array • saida_array.sort() 18/24 Hugo Salvador – 15/09/2012
  • 19. Array e xlwt from xlwt import Workbook arq_Relatorio = Workbook() planilha_problema= arq_Relatorio.add_sheet('Problema') array_titulo=['ID (SAGE)‘,'OCR (SAGE)‘, u'DESCRIÇÃO‘,'TIPO', 'COMANDO‘, u'MEDIÇÃO‘, 'ANUNCIADOR', 'LISTA DE ALARMES‘, 'SOE'] coluna=0 for titulo in array_titulo: planilha_problema.write(0,coluna,titulo) coluna+=1 for titulo in array_titulo: planilha_problema.write (0,array_titulo.index(titulo),titulo) 19/24 Hugo Salvador – 15/09/2012
  • 20. String ZZZ:0YYY:[F1/F2]:RAUT PRS:04L1:F1:RAUT tratar=string.replace(tratar_array[0],'ZZZ',Codigo_SE) tratar_1=string.replace(tratar,'0YYY',parametros_LT[0]) tratar_IdSage=tratar_array[0].split('/') ied0=unicode(tratar_IdSage[0][-2:]) ied1=unicode(tratar_IdSage[1][:2]) 20/24 Hugo Salvador – 15/09/2012
  • 21. String arq_LP = gerarPlanilha() nome_arq='./LP_gerada.xls’ seq_arq=0 while os.path.exists(nome_arq): seq_arq+=1 nome_arq=nome_arq[0:11]+'_'+str(seq_arq)+’.xls’ arq_LP.save(nome_arq_saida[2:]) if (descricao.find('87L')>=0: descricao . . . ‘Trip Relé Diferencial 87L Fase A’ if int(parametros_LT[1][0])>3: parametros_LT . . . [‘04L1’,’4UA2A’,’Sim’,’Tripolar’,...] 21/24 Hugo Salvador – 15/09/2012
  • 22. Equação Booleana cd1 = tratar.find('F3')<0 or (tratar.find('F3')>-1 and (parametros_Trafo[6]=='PU/PG')) cd2 = ... cd3 = ... cd4 = ... cd5 = ... cd6 = ... cd7 = ... if (cd1+cd2)*cd3*cd4*cd5*cd6*cd7: . . . 22/24 Hugo Salvador – 15/09/2012
  • 23. Mais coisas legais • Vários IDEs disponíveis (Coisas simples uso Idle, se complicar uso Eclipse + PyDev) • Linguagem Interpretada, mas compilada! (Distribuição do software com arquivos compilados) • Interpretador dinâmico (faça test-drive antes de usar a função, programar com Idle aberto) • Vasto material de referência e códigos na Internet (programar com browser aberto) • Pode-se programar em Python para Desktop, Web ou Celular (LP Scripts pode passar do Desktop para Intranet) • Estrutura fácil, muito material de consulta disponível... Se consegue desenvolver programa de forma prazerosa e com facilidade 23/24 Hugo Salvador – 15/09/2012
  • 24. Coordenador do Projeto Hugo Everaldo Salvador Bezerra Chesf/DEEC Obrigado! Co autores Fábio André da Silva Hugo Everaldo Salvador Bezerra Chesf/DEEC hugos@chesf.gov.br Jose Geraldo da Silva Júnior +55 81 3229 3221 Chesf/DOMO 24/24 Hugo Salvador – 15/09/2012