lp script pug-pe

24
Hugo Salvador – 15/09/20 /24 Automatização com Python de Listas de Pontos para Subestações do Setor Elétrico

Upload: hugoesb

Post on 18-Dec-2014

1.517 views

Category:

Documents


1 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Lp script pug-pe

Hugo Salvador – 15/09/20121/24

Automatização com Python de Listas

de Pontos para Subestações do Setor

Elétrico

Page 2: Lp script pug-pe

Hugo Salvador – 15/09/20122/24

Contextualização

Programa LP Scripts

Como o Python facilitou minha vida

Page 3: Lp script pug-pe

Hugo Salvador – 15/09/20123/24

Sistema Elétrico

Subestação

Linha de Transmissão

Usina de Geração

Linha de Distribuição

Page 4: Lp script pug-pe

Hugo Salvador – 15/09/20124/24

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).

IED

Rede Ethernet

Supervisório

Computador Controlador

Equipamentos de Alta Tensão

Page 5: Lp script pug-pe

Hugo Salvador – 15/09/20125/24

SupervisórioSAGE – Tela de Diagrama Unifilar

Page 6: Lp script pug-pe

Hugo Salvador – 15/09/20126/24

SupervisórioSAGE – Tela de Alarmes e Comandos

Page 7: Lp script pug-pe

Hugo Salvador – 15/09/20127/24

SupervisórioSAGE – Tela de Lista de Alarmes

Page 8: Lp script pug-pe

Hugo Salvador – 15/09/20128/24

Programa LP Scripts

Page 9: Lp script pug-pe

Hugo Salvador – 15/09/20129/24

LP Scripts

NSIS

Bibliotecas LP Scripts

Módulosxlrd e xlwt

Python 2.7

Page 10: Lp script pug-pe

Hugo Salvador – 15/09/201210/24

LP Padrão(xls)

LP_Config(xls)

LP Scripts.pywc

Gerar_LP .pyc Checar_LP .pyc

LP .pyc

Entrada de Dados

Inicia Função Inicia Função

Usa FunçãoRetorna Array

Usa FunçãoRetorna Array

gerarPlanilha .pyc

Usa Função

LP_gerada(xls)

func.pyc

Relatório(xls)

Page 11: Lp script pug-pe

Hugo Salvador – 15/09/201211/24

Vamos à prática

Page 12: Lp script pug-pe

Hugo Salvador – 15/09/201212/24

Como o Python facilitou

minha vida

Page 13: Lp script pug-pe

Hugo Salvador – 15/09/201213/24

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/

Page 14: Lp script pug-pe

Hugo Salvador – 15/09/201214/24

Tkinter

class Janela:

...

# FRAME "Arquivo LP Padrao"-------------------------------------self.frm11 = LabelFrame(self.frmE, text=u'Arquivo LP Padrão', \

height = frmaltura, width = frmLargura) self.frm11.grid(row=1, column=1, padx=3, pady=3) self.nomeArquivo = Label(self.frm11, \

text=self.caminhoArquivoLP_Padrao) 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, column=1, sticky=N+E+S+W, pady=2, padx=10)

...

frmE frmD

frm11

frm21

frm31

frm41

frm12

Page 15: Lp script pug-pe

Hugo Salvador – 15/09/201215/24

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()

Page 16: Lp script pug-pe

Hugo Salvador – 15/09/201216/24

tkMessageBoxtry: from xlrd import open_workbookexcept: tkMessageBox.showerror('Erro',u'Modulo xlrd não instalado')

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

...

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

Page 17: Lp script pug-pe

Hugo Salvador – 15/09/201217/24

Array e xlrdfrom xlrd import open_workbookarq_conf = open_workbook('LP_config.xls')sheet = arq_conf.sheet_by_index(0)

conf_LT_array=[] #Configuração de LT index_linha=18while 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:...

Page 18: Lp script pug-pe

Hugo Salvador – 15/09/201218/24

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()

Page 19: Lp script pug-pe

Hugo Salvador – 15/09/201219/24

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=0for 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)

Page 20: Lp script pug-pe

Hugo Salvador – 15/09/201220/24

String

PRS:04L1:F1:RAUTZZZ:0YYY:[F1/F2]: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])

Page 21: Lp script pug-pe

Hugo Salvador – 15/09/201221/24

Stringarq_LP = gerarPlanilha()

nome_arq='./LP_gerada.xls’seq_arq=0while 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 int(parametros_LT[1][0])>3:... [‘04L1’,’4UA2A’,’Sim’,’Tripolar’,...]

parametros_LT

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

descricao

Page 22: Lp script pug-pe

Hugo Salvador – 15/09/201222/24

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:...

Page 23: Lp script pug-pe

Hugo Salvador – 15/09/201223/24

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

Page 24: Lp script pug-pe

Hugo Salvador – 15/09/201224/24

Obrigado!Hugo Everaldo Salvador Bezerra

[email protected]+55 81 3229 3221

Coordenador do ProjetoHugo Everaldo Salvador BezerraChesf/DEEC

Co autoresFábio André da SilvaChesf/DEEC

Jose Geraldo da Silva JúniorChesf/DOMO