Lp script pug-pe
Upcoming SlideShare
Loading in...5
×
 

Lp script pug-pe

on

  • 2,005 views

Apresentação no XX encontro do PUG-PE sobre Automatização com python de listra de pontos para subestação do setor elétrico

Apresentação no XX encontro do PUG-PE sobre Automatização com python de listra de pontos para subestação do setor elétrico

Statistics

Views

Total Views
2,005
Views on SlideShare
511
Embed Views
1,494

Actions

Likes
0
Downloads
6
Comments
0

2 Embeds 1,494

http://pugpe.wordpress.com 1491
https://pugpe.wordpress.com 3

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Lp script pug-pe Lp script pug-pe Presentation Transcript

  • Automatização com Python de Listas de Pontos para Subestações do Setor Elétrico1/24 Hugo Salvador – 15/09/2012
  • Contextualização Programa LP Scripts Como o Python facilitou minha vida2/24 Hugo Salvador – 15/09/2012
  • Sistema Elétrico Usina de Geração Linha de Distribuição Linha de Transmissão Subestação3/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ão4/24 Hugo Salvador – 15/09/2012
  • Supervisório SAGE – Tela de Diagrama Unifilar5/24 Hugo Salvador – 15/09/2012
  • Supervisório SAGE – Tela de Alarmes e Comandos6/24 Hugo Salvador – 15/09/2012
  • Supervisório SAGE – Tela de Lista de Alarmes7/24 Hugo Salvador – 15/09/2012
  • Programa LP Scripts8/24 Hugo Salvador – 15/09/2012
  • LP Scripts LP NSIS Scripts Bibliotecas LP Scripts Módulos xlrd e xlwt Python 2.79/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ática11/24 Hugo Salvador – 15/09/2012
  • Como o Python facilitou minha vida12/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 frmDclass Janela: frm11 frm12 ...# FRAME "Arquivo LP Padrao"-------------------------------------self.frm11 = LabelFrame(self.frmE, text=uArquivo LP Padrão, height = frmaltura, width = frmLargura) frm21self.frm11.grid(row=1, column=1, padx=3, pady=3)self.nomeArquivo = Label(self.frm11, text=self.caminhoArquivoLP_Padrao) frm31self.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 janelatry: app.iconbitmap(default=chesf.ico‘) # Ícone utilizado pela janelaexcept: passapp.resizable(0,0)Janela(app)app.mainloop()15/24 Hugo Salvador – 15/09/2012
  • tkMessageBoxtry: from xlrd import open_workbookexcept: tkMessageBox.showerror(Erro,uModulo xlrd não instalado)try: from lp_lib.Gerar_LP import gerarexcept: tkMessageBox.showerror(Erro,uMódulo Gerar não instalado) ...tkMessageBox.showinfo(Aviso, uArquivo "+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)‘, uDESCRIÇÃO‘,TIPO, COMANDO‘, uMEDIÇÃ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 facilidade23/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/DOMO24/24 Hugo Salvador – 15/09/2012