Samia Kamal Genena

Transcrição

Samia Kamal Genena
UNIVERSIDADE FEDERAL DE SANTA CATARINA
CURSO DE ENGENHARIA DE CONTROLE E AUTOMAÇÃO INDUSTRIAL
Simplementação, Configuração e
Customização do Sistema PI na Unidade
Multipropósito de FCC
Monografia submetida à Universidade Federal de Santa Catarina
como requisito para a aprovação da disciplina:
DAS 5511 Projeto de Fim de Curso
Samia Kamal Genena
Florianópolis, Março de 2004
Implementação, Configuração e
Customização do Sistema PI na
Unidade Multipropósito de FCC
Monografia submetida à Universidade Federal de Santa Catarina
como requisito para a aprovação da disciplina:
DAS 5511: Projeto de Fim de Curso
Samia Kamal Genena
Florianópolis, março de 2004
Implementação, Configuração e Customização do Sistema
PI na Unidade Multipropósito de FCC
Samia Kamal Genena
Esta monografia foi julgada no contexto da disciplina
DAS 5511: Projeto de Fim de Curso
e aprovada na sua forma final pelo
Curso de Engenharia de Controle e Automação Industrial
Banca Examinadora:
Alberto Jamhour, Eng.
Orientador Empresa
Julio Elias Normey Rico, PhD.
Orientador do Curso
Prof. Augusto Humberto Bruciapaglia
Responsável pela disciplina
Prof. Ubirajara Franco Moreno, Avaliador
Ronald Gomes, Debatedor
Rodrigo Castelan Carlson, Debatedor
À memória de minha filha Santra,
com todo carinho.
i
Agradecimentos
Ao engenheiro e orientador Alberto Jamhour, pela habilidade com que
orientou meu trabalho nunca deixando de me incentivar, propiciando um ambiente
de trabalho favorável, facilitador de minha jornada.
Ao professor e orientador Julio Elias Normey Rico, que prontamente aceitou o
desafio de me orientar, apesar das dificuldades ligadas ao tema, pela sua grande
dedicação e conhecimento em projetos de pesquisa, e pela minha formação
profissional.
À Universidade Federal de Santa Catarina - UFSC - e aos professores do
curso de Engenharia de Controle e Automação Industrial, responsáveis pela minha
formação.
Ao apoio financeiro da Agência Nacional do Petróleo - ANP - e da
Financiadora de Estudos e Projetos - FINEP - por meio do Programa de Recursos
Humanos da ANP para o Setor Petróleo e Gás - PRH nº34 - ANP/MCT.
À PETROBRAS/UN-SIX pela oportunidade de estágio e aprendizado
oferecidos.
Ao suporte da OSIsoft, especialmente Wanda Eaton e Justin Starnes, pela
competência e dedicação, estando sempre presentes quando surgiram dúvidas
relacionadas ao sistema PI.
Ao operador Gilson Mauro Herbst, conhecedor do Sistema PI, que colaborou
no início do projeto explicando o funcionamento do sistema.
À engenheira química e amiga, Luciana Monteguti, que com paciência me
explicou o funcionamento do processo de Craqueamento Catalítico Fluidizado.
Obrigada pelo companheirismo, amizade e suporte emocional que proporcionou.
Aos estagiários da PETROBRAS/UN-SIX, que compartilharam o período de
estágio comigo, em especial ao estagiário e amigo João Rodrigues Giovani de
Souza e à estagiária e amiga Daniela Muccillo, pelo companheirismo, compreensão
e amizade.
ii
A minha mãe Tânia Regina Ferreira, exemplo de coragem, determinação,
retidão e perseverança, pessoa a qual admiro muito, pela dedicação e amor durante
toda a minha vida, pelo constante incentivo para prosseguir na busca do meu ideal,
e a minha irmã gêmea Aziza Kamal Genena, pessoa que também admiro e amo,
obrigada pelo incentivo dedicado a mim.
Ao meu namorado, Ricardo Gabriel Steinbach, uma pessoa convicta e
sensível, que sempre compartilhou entusiasticamente de várias idéias, uma pessoa
de visão e motivadora, obrigada pelo companheirismo, carinho e amor dedicados a
mim.
Às amigas, Clarice Urban Chagas e Michelle Bonatti, que sempre foram
fontes de amizade e força, estando presentes em diversas situações da minha vida.
Aos amigos da graduação: Victor Rocha, Leonardo Soliz Encinas e Hermínio
Matias Neto, os quais admiro imensamente pela inteligência e pela maneira com que
vivem e enxergam a vida.
Agradeço em especial ao amigo Leandro de Souza, Engenheiro de Controle e
Automação Industrial, que para mim, mais que um amigo é um irmão, sempre
compartilhando comigo os bons e maus momentos, alegrias e tristezas, ajudandome com palavras sábias de um verdadeiro amigo que ele é, sempre me incentivando
e dando força para seguir em frente sem me deixar abater.
Por fim e não menos importante, agradeço saudosa de minha pedra preciosa
e filha Santra, que faleceu no decurso deste projeto, deixando saudade. Obrigada
pelo amor incondicional que durante dez anos foi fonte inesgotável de alegria e
essência da magia que é a razão da minha persistência, energia e luta, rendo-lhe
meu amor eterno e homenagem.
iii
A
conclusão
de
um
curso
de
graduação é um passo no desenvolvimento
pessoal num tempo em que a única
constante é a mudança.
iv
Resumo
O sistema PI (Plant Information) pode ser traduzido como um conjunto de
ferramentas que permite o acompanhamento de processos industriais, o
armazenamento do histórico dos dados desses processos e o acompanhamento online das suas variáveis. A grande vantagem desse sistema é a possibilidade de
realizar consultas aos dados sem haver necessidade de vínculo físico do cliente com
o Sistema de Controle Distribuído (SDCD).
O objetivo do Projeto de Fim de Curso foi a implementação, configuração e
customização do sistema PI na Unidade Multipropósito de Craqueamento Catalítico
Fluido da SIX.
As atividades desenvolvidas na Petrobras/SIX que serão abordadas nesta
monografia estiveram relacionadas ao conhecimento do sistema, atualização e
inserção de novos tags no banco de dados do servidor, instalação e configuração de
uma nova interface de coleta de dados entre o SDCD e o servidor, criação de telas
de processo para acompanhamento do processo nas máquinas clientes, e
principalmente o desenvolvimento de aplicativos em Visual Basic, os quais são
responsáveis por monitorar e inserir dados manualmente no servidor.
v
Abstract
The Plant Information System (PI System) can be defined as a group of tools
that allows the attendance of industrial processes, the storage of the processes data
report and the on-line attendance of their variables.
The great advantage of PI System is the possibility to watch the process data
without the need of a physical bond between the client machines and the DCS.
The objective of this dissertation is to describe the developed work of
implementation, configuration and customizing of the PI System in the Fluid Catalytic
Cracking Unit of SIX.
The developed activities that will be approached in this monograph were
related to the knowledge of the system, updating and inserting of new tags in the
server's database, installation and configuration of a new interface of data collection
between DCS and server, creation of process screens for attendance of the process
in the client machines, and mainly the development of applications in Visual Basic,
which are responsible for monitoring and manually inserting data in the server.
vi
Sumário
Agradecimentos................................................................................................ ii
Resumo ............................................................................................................ v
Abstract ........................................................................................................... vi
Sumário .......................................................................................................... vii
Índice de Figuras .............................................................................................. x
Índice de Anexos ............................................................................................ xii
Capítulo 1: Introdução ......................................................................................1
Capítulo 2: Petrobras – Petróleo Brasileiro S/A................................................3
2.1: Áreas de Atuação...................................................................................4
2.1.1: Abastecimento.................................................................................4
2.1.2: Exploração e Produção ...................................................................4
2.1.3: Gás e Energia..................................................................................5
2.1.4: Internacional ....................................................................................5
2.2: Unidade de Industrialização do Xisto – SIX ...........................................6
2.2.1: Processo PETROSIX ......................................................................6
2.2.2: Gerência de Pesquisa – GEPES .....................................................9
2.3: Craqueamento Catalítico Fluido...........................................................13
2.3.1: Descrição Sumária do Processo ...................................................14
2.3.2: Produtos de Craqueamento...........................................................16
2.3.3: Catalisadores para FCC ................................................................19
2.3.4: Carga para Craqueamento ............................................................19
2.3.5: Variáveis Operacionais..................................................................20
2.4: Unidade Multipropósito de FCC – U144...............................................21
vii
2.4.1: Descrição Geral.............................................................................21
2.4.2: Fluxo de Catalisador......................................................................22
2.4.3: Fluxo de Carga ..............................................................................23
2.4.4: Fluxo de Ar ....................................................................................23
2.4.5: Fluxo de Vapor ..............................................................................24
2.4.6: Fluido de Selagem.........................................................................24
2.4.7: Amostrador de Topo e Sistemas de Condensação .......................24
Capítulo 3: O Sistema PI ................................................................................26
3.1: O Armazenamento dos Dados .............................................................28
3.1.1: Buferização dos Dados .................................................................29
3.1.2: Teste de Exceção..........................................................................30
3.1.3: Compressão dos Dados ................................................................30
3.2: Tags .....................................................................................................33
3.3: Acesso aos Dados ...............................................................................35
3.3.1: PI-API ............................................................................................35
3.3.2: Utilitários Clientes..........................................................................37
3.3.3: Interface semAPI ...........................................................................39
3.4: Sistema de Controle Distribuído – SDCD ............................................43
Capítulo 4: Etapas do Trabalho Desenvolvido................................................44
4.1: Instalação e Configuração da Interface................................................44
4.2: Criação de Planilhas para Automação de Tarefas Repetitivas ............50
4.2.1: Cálculo de Atributos dos Tags a partir do BD do SDCD................50
4.2.2: Cálculo de Estados Digitais ...........................................................53
4.2.3: Cálculo de Valores Atuais das Variáveis .......................................54
4.3: Criação de Telas de Processo .............................................................55
4.4: Desenvolvimento de Aplicativos em Visual Basic ................................60
viii
4.4.1: PI Tag Monitor ...............................................................................60
4.4.2: Entrada Manual de Dados .............................................................64
4.4.3: PI Data Insert.................................................................................65
Capítulo 5: Discussão dos Resultados, Conclusões e Perspectivas ..............68
Bibliografia:.....................................................................................................71
Anexos:...........................................................................................................72
ix
Índice de Figuras
Figura 1 – Produtos e Subprodutos do Xisto ....................................................7
Figura 2 – Processo Petrosix............................................................................8
Figura 3 – Unidade de extração do óleo de xisto (retorta)................................9
Figura 4 – Diagrama de Blocos do Craqueamento Catalítico.........................16
Figura 5 – Unidade Multipropósito de FCC.....................................................22
Figura 6 – Fluxo dos Dados............................................................................26
Figura 7 – Arquitetura do Sistema PI na SIX ..................................................27
Figura 8 – Processamento de Informações Novas.........................................28
Figura 9 – PI Snapshot Subsystem ................................................................28
Figura 10 – Fluxo da Exceção à Compressão ................................................29
Figura 11 – Exemplo do Processo de Filtragem dos Dados...........................29
Figura 12 – Sistema de Buferização...............................................................29
Figura 13 – Como funciona o Exception Report .............................................30
Figura 14 – Parâmetros de Compressão........................................................31
Figura 15 – Primeiro Passo da Compressão de Dados..................................31
Figura 16 – Zona Morta da Compressão ........................................................32
Figura 17 – Determinação do valor a ser armazenado...................................32
Figura 18 – Compressão dos Dados ..............................................................33
Figura 19 – Resultado Final da Compressão dos Dados ...............................33
Figura 20 – Máquina Cliente com PI-API........................................................36
Figura 21 – PI Tag Configurator – add-in para Microsoft Excel ......................38
Figura 22 – PI Point Builder............................................................................38
Figura 23 – Interface – Intermediador na Coleta de Dados ............................39
x
Figura 24 – Esquema do Interfaceamento ABB/Bailey-PI semAPI.................39
Figura 25 – Módulo/Cartão de Comunicação INICI03 ....................................40
Figura 26 – Estrutura do Interfaceamento ABB/Bailey-PI semAPI .................41
Figura 27 – Tela do LICENTRY ......................................................................45
Figura 28 – Tela do ICICONF.........................................................................46
Figura 29 – Buffer Primário de Memória sendo utilizado ................................49
Figura 30 – Buffer Secundário de Memória sendo utilizado ...........................49
Figura 31 – Guia EngUnits .............................................................................50
Figura 32 – Guia Bailey PointType .................................................................51
Figura 33 – Guia BD SDCD............................................................................52
Figura 34 – Guia Cálculo para Exportar .........................................................52
Figura 35 – Estados Digitais Lógicos..............................................................53
Figura 36 - Estados digitais de cada tag digital .............................................54
Figura 37 – Retorno de Valor Atual das Variáveis ..........................................55
Figura 38 – Lista de telas do PI-ProcessBook................................................56
Figura 39 – Comparação entre telas de processo..........................................57
Figura 40 –Tela de Processo Geral criada no PI-ProcessBook......................58
Figura 41 – Tela criada no PI-ProcessBook ...................................................59
Figura 42 – Gráfico do PI-ProcessBook .........................................................59
Figura 43 – PI Tag Monitor – Splash Screen..................................................61
Figura 44 – PI Tag Monitor – Tela de Monitoração dos Dados ......................61
Figura 45 – PI Tag Monitor – Tela de Busca ..................................................62
Figura 46 – PI Tag Monitor – Resultado da Busca Efetuada..........................63
Figura 47 – PI Tag Monitor – Monitoramento de Variáveis.............................64
Figura 48 – PI Data Insert – Tela de Inserção dos Dados ..............................66
Figura 49 – PI Data Insert – Processo de Inserção dos Dados ......................67
xi
Índice de Anexos
Anexo A – Fluxograma Unidade Multipropósito de FCC ................................72
Anexo B – Código Fonte do arquivo piapi32.bas............................................73
Anexo C – Código Fonte do arquivo piutil.bas................................................79
Anexo D – PI Tag Monitor – Código Fonte do Splash Form..........................82
Anexo E – PI Tag Monitor – Código Fonte do Display Form .........................83
Anexo F – PI Tag Monitor – Código Fonte do Search Form...........................85
Anexo G – PI Data Insert – Código Fonte do DataInsert Form.......................87
Anexo H – Supported Input Point Types (ABB/Bailey Data to PI) ..................89
Anexo I – Lista Completa de parâmetros do blysem.bat ................................90
xii
Capítulo 1: Introdução
O assunto a ser abordado no decorrer desta monografia foi desenvolvido
durante a execução do Projeto de Fim de Curso, realizado durante período de
estágio na empresa Petrobras/UN-SIX, onde se trabalhou junto à Gerência de
Pesquisa com o sistema PI (Plant Information), sendo exigida a implementação,
configuração e customização do mesmo de acordo com os objetivos a serem
alcançados pela companhia.
Por implementação entende-se dar efeito prático a algo concebido através de
uma ação objetiva. Configurar por sua vez significa dar forma. Customização, por
fim, tem o sentido de adaptar os produtos e processos ao gosto do cliente,
originando da palavra do inglês customer, que significa cliente.
Assim, durante a realização do trabalho foi possível efetivar de fato o
funcionamento do sistema PI, dando forma ao mesmo para que funcionasse
corretamente, e criando interfaces de comunicação entre os usuários e o servidor de
dados que se adaptassem a utilização requerida pelo cliente.
Sendo o sistema PI um conjunto de servidor/cliente desenvolvido para
automatizar totalmente a coleta, armazenamento e apresentação das informações
de um processo, esse Projeto de Fim de Curso está completamente inserido no
contexto do curso de Engenharia de Controle e Automação Industrial.
Constavam entre os objetivos do trabalho a ser realizado: a operacionalização
do sistema para as unidades de pesquisa da SIX, iniciando pela U144 (Unidade
Multipropósito de Craqueamento Catalítico Fluido); a integração dos dados oriundos
do PI com os programas para balanço de massa e energia da unidade; e a
elaboração roteiros para manutenção e implementação adicionais, quando
necessárias.
O sistema PI foi encontrado fora de funcionamento, especialmente no que diz
respeito à comunicação entre o SDCD e a interface de coleta dos dados. Assim, o
foco inicial do trabalho resumiu-se em fazer com que a interface funcionasse
corretamente.
1
A metodologia adotada foi baseada no aprendizado e no conhecimento
adquirido progressivamente sobre o funcionamento do sistema através de manuais,
internet e contatos com o fabricante e o representante no Brasil, seguindo o princípio
de que é preciso conhecer bem o sistema para poder configurá-lo e fazê-lo funcionar
corretamente.
No
decorrer
da
monografia
poder-se-á
acompanhar
as
etapas
de
desenvolvimento do trabalho realizado.
Primeiramente, no capítulo 2, é feita uma apresentação da empresa onde o
estágio foi realizado, composta de um breve relato sobre sua história e áreas de
atuação. Nesse mesmo capítulo é feita uma descrição do processo de
craqueamento catalítico fluido, a título de informação para os leitores e de sua
implementação na Unidade de Industrialização do Xisto – SIX.
No capítulo 3 descreve-se os conhecimentos adquiridos sobre o sistema PI e
seu funcionamento, bem como o funcionamento da interface semAPI que executa a
coleta de dados do SDCD.
No quarto capítulo são descritas as atividades desenvolvidas pela autora,
acompanhadas de esclarecimentos sobre projetos quando esses se fizerem
necessários.
Finalmente, no quinto e último capítulo, é apresentada uma discussão dos
resultados, junto com conclusões e perspectivas sobre o projeto, onde se faz uma
análise crítica das realizações e dificuldades encontradas durante o período.
2
Capítulo 2: Petrobras – Petróleo Brasileiro S/A
Em outubro de 1953, através da Lei nº. 2.004, a Petrobras era criada para
executar as atividades do setor de petróleo no Brasil em nome da União.
Ao longo de quatro décadas, tornou-se líder em distribuição de derivados no
país, colocando-se entre as vinte maiores empresas petrolíferas na avaliação
internacional.
Em 1997, o Brasil ingressou no seleto grupo de 16 países que produz mais de
um milhão de barris de óleo por dia. E nesse mesmo ano foi criada a Lei nº. 9.478,
que abre as atividades da indústria petrolífera à iniciativa privada.
Com a lei, foram criados a Agência Nacional do Petróleo (ANP), encarregada
de regular, contratar e fiscalizar as atividades do setor; e o Conselho Nacional de
Política Energética, um órgão formulador da política pública de energia. Em sintonia
com a mudança do cenário, a Petrobras seguiu preparada para a livre competição,
ampliando novas perspectivas de negócios e tendo maior autonomia empresarial.
Noventa e três plataformas de produção, mais de dez refinarias, quase
dezesseis mil quilômetros em dutos e mais de sete mil postos de combustíveis,
esses são números da Petrobras que representam sua forte presença no Brasil.
A Petrobras desenvolve diversas atividades no exterior e mantém uma
consistente atividade internacional, tal como: compra e venda de petróleo,
tecnologias,
equipamentos,
materiais
e
serviços;
acompanhamento
do
desenvolvimento da economia americana e européia; operação financeira com
bancos e bolsa de valores; recrutamento de pessoal especializado; afretamento de
navios; apoio em eventos internacionais, entre outros.
Além de estar presente em diversos países como Angola, Argentina, Bolívia,
Colômbia, Estados Unidos e Nigéria, a Petrobras conta ainda com o apoio de seus
escritórios no exterior como em Nova Iorque e no Japão. Além disso, há o CENPES,
o Centro de Pesquisas da Petrobras, que possui uma das mais avançadas
tecnologias do mundo e é reconhecido internacionalmente pela sua competência.
3
2.1: Áreas de Atuação
A Petrobras atua em várias áreas do setor de energia. Desde a exploração de
gás e petróleo até a distribuição, passando pelo refino e abastecimento, as
atividades da companhia estão divididas em: Exploração e Produção, Gás e Energia,
Abastecimento, e Internacional.
Como empresa de energia, a Petrobras atua em várias áreas desse setor,
desde a exploração de gás e petróleo, refino, abastecimento até a distribuição.
2.1.1: Abastecimento
A Petrobras abastece quase toda a demanda do mercado brasileiro por
derivados de petróleo – cerca de 1,7 milhões de barris/dia - mercado esse composto
por 140 milhões de consumidores.
Além do objetivo de aumentar sua capacidade de produção, de modo a
atender a crescente demanda por derivados, a Petrobras precisa enfrentar outro
desafio: adaptar suas refinarias de modo a aumentar a taxa de conversão de
diferentes tipos de óleo, dentro da já existente estrutura de processamento,
eliminando, assim, a dependência da importação.
De acordo com a Petroleum Intelligence Weekly, a Petrobras é a nona maior
companhia no setor downstream - refino, transporte e comercialização. O termo
downstream, na Petrobras, está ligado à boa parte da estrutura operacional da
companhia: suas onze refinarias, duas fábricas de fertilizantes, bases, dutos,
terminais e navios.
2.1.2: Exploração e Produção
O órgão de Exploração e Produção (E&P) da Petrobras é responsável pela
pesquisa, localização, identificação, desenvolvimento, produção e incorporação de
reservas de óleo e gás natural dentro do território nacional.
Impulsionado pelo fato de grande parte das reservas brasileiras se
encontrarem em bacias marítimas a grandes profundidades, o E&P, em parceria
com outras áreas da Companhia, tem alçado a Petrobras à excelência mundial em
desenvolvimento e aplicação de tecnologia de exploração e produção em águas
4
profundas. Esse esforço foi reconhecido internacionalmente através do recebimento,
pela segunda vez, no ano 2001, do prêmio mais importante da indústria mundial de
petróleo, o Distinguished Achievement Award, oferecido na Offshore Technology
Conference (OTC).
2.1.3: Gás e Energia
A área de negócios de Gás & Energia é responsável pela comercialização do
gás natural nacional e importado e pela implantação de projetos, em parceria com o
setor privado, que irão garantir a oferta deste combustível em todo o país.
Elevar a participação do gás natural na matriz energética do país dos atuais
3% para 10% até 2005 é um dos principais objetivos da companhia. Para isso, a
Petrobras dedica esforço permanente junto às distribuidoras de gás e seus clientes,
buscando alternativas técnicas e econômicas que ampliem o uso do gás nos
segmentos industriais, automotivos, na geração e co-geração de energia.
A área de Gás & Energia da Petrobras é responsável por grande parte da
estrutura de transporte e comercialização, atuando sempre de maneira segura e
ambientalmente correta. Entre todos os combustíveis atualmente disponíveis em
larga escala, o gás natural é aquele que se destaca como o mais versátil, econômico
e limpo.
2.1.4: Internacional
A Petrobras desenvolve também diversas atividades no exterior e mantém
uma consistente atividade internacional, como: exploração; compra e venda de
petróleo, tecnologias, equipamentos, materiais e serviços; acompanhamento do
desenvolvimento da economia americana e européia; operação financeira com
bancos e bolsa de valores; recrutamento de pessoal especializado; afretamento de
navios; apoio em eventos internacionais, entre outros.
Ainda assim, a Companhia está associada às maiores empresas de petróleo
do mundo, fazendo-se presente em Angola, Argentina, Bolívia, Colômbia,
Casaquistão, Estados Unidos, Guiné Equatorial, Nigéria e Trinidad & Tobago.
5
2.2: Unidade de Industrialização do Xisto – SIX
A Unidade de Industrialização do Xisto foi constituída em 1º de junho de 1954,
com a missão de estudar as potencialidades do xisto betuminoso e a viabilidade
econômica de sua transformação industrial.
A sede está localizada no município de São Mateus do Sul, no Paraná, a 140
quilômetros de Curitiba, onde também se encontram a mina e a área industrial.
Em função da capacidade tecnológica desenvolvida na exploração do xisto, a
Petrobras resolveu transformar a planta industrial do xisto também num centro
avançado de pesquisa na área de refino. Assim, dentro da SIX podem ser
encontrados dois núcleos distintos, a Gerência de Produção e a Gerência de
Pesquisa.
Hoje, vários projetos estão sendo desenvolvidos em conjunto com
universidades e centros de pesquisas. Além disso, a SIX confere atenção especial à
preservação dos ecossistemas, promove e apóia os órgãos públicos de defesa do
meio ambiente e entidades ambientalistas.
2.2.1: Processo PETROSIX
O Brasil tem um dos maiores volumes mundiais de xisto: reservas de 1,9
bilhão de barris de óleo, 25 milhões de toneladas de gás liquefeito, 68 bilhões de
metros cúbicos de gás combustível e 48 milhões de toneladas de enxofre só na
formação Irati, que engloba os estados de São Paulo, Paraná, Santa Catarina, Rio
Grande do Sul, Mato Grosso do Sul e Goiás.
A Petrobras concentrou suas operações na jazida de São Mateus do Sul,
cidade do Paraná, onde o minério é encontrado em duas camadas: a camada
superior de xisto com 6,4 metros de espessura e teor de óleo de 6,4%, e a camada
inferior com 3,2 metros de espessura e teor de óleo de 9,1%.
Em 1972, entrou em operação a Usina Protótipo do Irati (UPI), que
comprovou a viabilidade técnica do processo PETROSIX, testou equipamentos e
levantou dados básicos para projetos de usinas industriais.
O processo de consolidação da tecnologia PETROSIX se completou em
dezembro de 1991, quando entrou em operação o Módulo Industrial (MI), em plena
6
escala. Atualmente, a SIX processa diariamente 7.800 toneladas de xisto
betuminoso, que geram 3.870 barris de óleo de xisto, 120 toneladas de gás
combustível, 45 toneladas de gás liquefeito de xisto e 75 toneladas de enxofre.
Figura 1 – Produtos e Subprodutos do Xisto
A principal característica da tecnologia desenvolvida pela Petrobras é a
simplicidade operacional. Depois de minerado a céu aberto, o xisto vai para um
britador, que reduz as pedras a tamanhos que variam de 6 a 70 milímetros. Então,
estas pedras são levadas a uma retorta, onde são pirolisadas (cozidas) a uma
temperatura de aproximadamente 500 graus Celsius liberando-se a matéria orgânica
nelas contida sob a forma de óleo e gás.
O calor para a pirólise é fornecido por uma corrente gasosa de elevada
temperatura, que entra na zona de retortagem e se mistura com uma segunda
corrente, injetada pela base da retorta, para recuperar o calor do xisto já retortado.
7
Figura 2 – Processo Petrosix
Nas zonas de aquecimento e secagem, a massa gasosa ascendente cede
calor ao xisto e se resfria, resultando na condensação dos vapores de óleo sob a
forma de gotículas, transportadas para fora da retorta pelos gases. Estes, com as
gotículas de óleo, passam por dois outros equipamentos (ciclone e precipitador
eletrostático), onde são coletados o óleo pesado e as partículas sólidas arrastadas
na etapa anterior.
O gás limpo de neblina de óleo (ou seja, das gotículas de óleo pesado
condensadas durante a retortagem) passa por um compressor e se divide em três
correntes: uma retorna para o fundo da retorta, outra também volta à retorta após
ser aquecida em um forno, e a terceira, denominada gás produto, vai para um
condensador onde o óleo leve é recuperado. Depois de retirado o óleo leve, o gás é
encaminhado à unidade de tratamento de gás para a produção de gás combustível
de xisto e para a recuperação do GLX (gás liquefeito de xisto) e do enxofre.
8
Figura 3 – Unidade de extração do óleo de xisto (retorta)
O óleo produzido é vendido diretamente para as indústrias e também é
enviado para a REPAR, Refinaria do Paraná. A nafta é toda processada pela
refinaria, produzindo gasolina. O GLX e o enxofre são vendidos diretamente para
terceiros.
Terminado o processo de retirada do óleo e gás da rocha, o xisto, agora dito
“retortado”, é devolvido à área minerada que será reabilitada.
2.2.2: Gerência de Pesquisa – GEPES
Desde sua criação em 1954, a SIX vem atuando como um centro de
desenvolvimento de tecnologia, inicialmente para o aproveitamento do xisto e a partir
de 1991 em outros projetos, principalmente na área de refino, trabalhando em
conjunto com o Centro de Pesquisas da Petrobras – CENPES.
Com a implantação do Programa de Desenvolvimento de Tecnologias
Estratégicas de Refino (Proter), que busca compatibilizar a maior oferta de petróleos
nacionais com o aumento da demanda de combustíveis e da sociedade pela
melhoria do ar e dos produtos, a SIX passou a trabalhar nas áreas de craqueamento
9
catalítico, desasfaltação, hidrogenação e no desenvolvimento de novas rotas para o
aproveitamento do coque e do resíduo asfáltico.
Assim, a SIX sedia um dos maiores esforços de desenvolvimento tecnológico
do país e vem realizando estudos para desenvolvimento de processos e
equipamentos, possuindo diversas plantas piloto, entre as quais destacamos:
2.2.2.1: Unidade Multipropósito de FCC
ƒ
Estuda o craqueamento catalítico de petróleos nacionais;
ƒ
Testa e desenvolve equipamentos como ciclones, riser, regenerador,
resfriador de catalisador e stripper;
ƒ
Determina a influência de variáveis de processo no rendimento e na qualidade
dos produtos;
ƒ
Levanta dados de projetos de novas unidades de FCC de resíduos;
ƒ
Desenvolve equipamentos e processos, e testa catalisadores.
2.2.2.2: Unidade de Nebulizadores de FCC
ƒ
Desenvolve dispersores de carga com boa distribuição de vazão, formando
um jato em leque, com tamanho e distribuição de gotículas controlados, alta
durabilidade, facilidade de contração, baixo consumo de fluido de atomização
e baixo diferencial de pressão.
2.2.2.3: Unidade de Hidroconversão de Resíduos
ƒ
Desenvolve tecnologia de hidroconversão, que maximiza a produção de
diesel com qualidade, a partir do resíduo de vácuo de Petróleo Marlim.
2.2.2.4: Unidade a Frio de Ciclones
ƒ
Avalia novas concepções e novas geometrias de ciclones;
ƒ
Avalia novas condições operacionais e desenvolve ciclones de alta eficiência,
baixa perda de carga e elevado fator operacional.
10
2.2.2.5: Unidade de Recirculação de Catalisador
ƒ
Pesquisa para propiciar aumento da taxa média de utilização do parque de
refino;
ƒ
Pesquisa materiais e desenvolve equipamentos para unidades de alto
desempenho e refino de petróleo nacional, com ênfase na conversão de
resíduos.
2.2.2.6: Unidade de Destilação
ƒ
Produz cortes de gasolinas especiais de competição, especialmente para a
Fórmula 1;
ƒ
Produz cortes de petróleo para estudo da qualidade e rendimentos dos
produtos;
ƒ
Avalia internos de torres.
2.2.2.7: Unidade de Desasfaltação
ƒ
Estuda a influência das variáveis operacionais na qualidade e rendimento dos
produtos;
ƒ
Avalia o desempenho de solventes com diferentes composições;
ƒ
Realiza testes de co-processamento e outros produtos na carga de
desasfaltação;
ƒ
Faz a avaliação de internos de torres;
ƒ
Produz cortes pesados para estudos de produção de asfaltos especiais.
2.2.2.8: Unidade de Pneus
ƒ
Armazena e promove a dosagem correta de pneus picados à carga de
minério. O processo Petrosix permite a reciclagem de 140 mil toneladas/ano,
ou o equivalente a 27 milhões de pneus - 1 tonelada de pneus rende: 532 kg
de óleo, 24 kg de gás, 314 kg de carbono e 110 kg de aço.
11
2.2.2.9: Unidade de Tratamento e Misturas
ƒ
Reverte termicamente o concentrado nitrogenado de gasóleo, viabilizando a
acidificação de cargas para UFCCs;
ƒ
Utilizada para preparo de misturas diversas, combustíveis para queima e
testes de fornos.
2.2.2.10: Laboratório
O laboratório está preparado para realizar análises elementares completas,
com equipamentos de última geração, tais como:
ƒ
Espectrômetro de absorção atômica com geração de hidretos, da Varian,
modelo Aa220;
ƒ
Espectrômetro por quimiluminescência e fluorescência para determinação de
nitrogênio e enxofre, da Antec, modelo NS9000;
ƒ
Analisador por infravermelho e condutividade térmica para determinação de
carbono, hidrogênio e nitrogênio, da Leco, modelo CHN2000;
ƒ
Destilador D-86;
ƒ
Cromatógrafos para destilação simulada (D-2887 e HT750) da HP;
ƒ
Cromatógrafo para análise de PIANIO - HP 6890;
ƒ
Bancada de destilação (PEV, POT STEEL e D1150).
Além de executar ensaios de acompanhamento de processos e vendas da
SIX, o laboratório fornece suporte a todas as plantas do Parque Tecnológico, sendo
capacitando a realizar mais de 120 trabalhos e ensaios.
2.2.2.11: Laboratório de Medição de Partículas a Laser
ƒ Laser de argônio INNOVA 70C-5, de 5 watts, para medir o tamanho de
partículas (PDPA - phase doppler particle analyser) e sua velocidade no
interior de ciclones (LDV - laser doppler velocimeter).
12
2.2.2.12: Laboratório de Combustão
ƒ
Obtém informações a respeito da queima de diversos tipos de combustíveis e
suas emissões, inclusive particulados;
ƒ
Testa queimadores, materiais e equipamentos;
ƒ
Otimiza condições operacionais, em função do combustível e queimador.
2.2.2.13: Unidade de Tratamento Ácido de Gasóleo/ Emulsões
ƒ
Desenvolve o processo de remoção de nitrogênio básico de cargas de FCC,
visando aumentar a conversão e qualidade dos produtos;
ƒ
Estuda emulsões diversas e tratamentos de rejeitos industriais.
2.3: Craqueamento Catalítico Fluido
O processo de Craqueamento Catalítico Fluido – FCC (Fluid Catalytic
Cracking) – nasceu em 1942 e apesar de quase 60 anos de amadurecimento
continua sendo uma tecnologia em evolução, sendo atualmente o principal processo
de conversão das frações pesadas de petróleo para produtos leves das refinarias
modernas.
Até 1913, toda a gasolina produzida era obtida por destilação direta do
petróleo, portanto, tanto a qualidade como a quantidade dependiam unicamente do
tipo de cru refinado. Como havia grande variedade de petróleos, havia também uma
grande variação no rendimento e na qualidade das gasolinas. Em média, entretanto,
o rendimento situava-se em torno de 20% em volume.
A partir da segunda década do século, começaram a surgir processos
comerciais de craqueamento, objetivando suprir as necessidades da indústria
automobilística. Iniciando com o craqueamento térmico, o processo mais tarde
passou a utilizar a versão catalítica, em leitos fixo, móvel ou fluidizado,
desenvolvendo-se de forma notável esta última concepção, até atingir o estágio em
que hoje nos encontramos, onde o craqueamento catalítico fluido é praticamente um
processo imprescindível às modernas refinarias.
13
O craqueamento catalítico é um processo de refino que visa aumentar a
produção de gasolina e de gás liquefeito de petróleo – GLP, através da conversão
de cortes pesados provenientes da destilação do petróleo (gasóleo e resíduos), em
frações mais leves. É um processo largamente utilizado em todo o mundo, uma vez
que a demanda de gasolina em vários países é superior a dos óleos combustíveis.
O craqueamento catalítico corrige a produção de gasolina e GLP,
suplementando a diferença entre a quantidade obtida diretamente do petróleo e a
requerida pela refinaria de modo a atender ao mercado.
O FCC é hoje um processo largamente difundido em todo o mundo, devido
principalmente a dois fatores. O primeiro deles consiste no fato de contribuir
eficazmente com a refinaria no sentido de ajustar sua produção às reais
necessidades do mercado consumidor local, devido à sua grande flexibilidade
operacional. O segundo fator que tornou consagrado o processo está ligado ao
aspecto econômico, transformando frações residuais, de baixo valor comercial, em
derivados nobres de alto valor.
2.3.1: Descrição Sumária do Processo
O processo consiste na quebra de moléculas pesadas presentes nos
gasóleos e resíduos, por ação de um catalisador à base de sílica-alumina, em altas
temperaturas. A ruptura das ligações possibilita o aparecimento de moléculas leves,
principalmente compostos de 3 a 12 átomos de carbono (GLP e Gasolina), devido à
seletividade do catalisador usado. As reações provocam também a formação, em
menor escala, de gases leves, gasóleos leve e pesado, e coque, este último
depositando-se na superfície do catalisador.
A deposição de coque provoca a desativação do catalisador, devido à
considerável redução da área disponível aos reagentes (hidrocarbonetos). Com o
objetivo de restaurar-se a atividade, o catalisador inativado pelo coque é
continuamente retirado do vaso de reação e enviado a um vaso de regeneração
onde, por intermédio de uma injeção de ar e por ação de alta temperatura, o coque é
queimado, restabelecendo a atividade catalítica. O conjunto reator-regenerador é
denominado conversor.
14
Os gases de craqueamento efluentes do reator são encaminhados à seção de
fracionamento, onde, por intermédio de uma torre de destilação, obtém-se uma
separação primária dos cortes produzidos. Pelo fundo da torre produz-se um óleo
pesado, bastante denso, denominado Resíduo de Craqueamento. Esta corrente
também é conhecida como Óleo Decantado ou Óleo Clarificado.
A fracionadora produz, como corte lateral, um óleo leve de faixa de ebulição
semelhante ao diesel conhecido como Óleo Leve de Reciclo (Light Cycle Oil – LCO)
ou Diesel de Craqueamento.
Pelo topo da torre sai uma corrente gasosa composta da nafta (gasolina) de
craqueamento e de hidrocarbonetos mais leves que, uma vez resfriada e
condensada parcialmente, gera no tambor de acúmulo duas correntes. A corrente
gasosa é composta de hidrocarbonetos leves (C1, C2, C3 e C4), enquanto a fração
líquida é constituída de nafta instabilizada (grande quantidade de gases leves
dissolvidos). Ambas as correntes são enviadas à seção de recuperação de gases.
A finalidade da seção de recuperação de gases é, através de operações de
compressão, absorção, retificação e destilação em várias etapas, processar as
correntes de gases e de nafta instabilizada, e dela separar três frações distintas, o
Gás Combustível do Gás Liquefeito – GLP, e o tratamento Merox , tratamento que
remove mercaptanas, que do GLP e da nafta. As mercaptanas são compostos
orgânicos que contém enxofre, do tipo RSH, onde R é um radical orgânico. Esses
compostos causam efeitos negativos na qualidade da gasolina, como mau cheiro e
formação de goma na estocagem da gasolina. O tratamento Merox é também
chamado de adoçamento Merox (Mercaptan Oxidation), e utiliza soda cáustica –
hidróxido de sódio – para remover as mercaptanas através da formação de
dissulfeto. Após essas operações as frações são destinadas à estocagem.
A corrente de gás ácido rico em H2S, proveniente do tratamento DEA,
tratamento que utiliza dietilamina (DEA) para remover compostos indesejáveis
(contendo enxofre) de corrente de gases, principalmente gás combustível, através
da absorção, é normalmente enviado à Unidade de Recuperação de Enxofre (URE),
onde, através de uma queima controlada da corrente gasosa, tem-se então a
produção de enxofre elementar.
15
Os gases de combustão provenientes da queima do coque durante a
regeneração do catalisador saem dessa etapa em elevadas temperaturas,
superiores a 700ºC. De modo a aproveitar todo o potencial energético dessa
corrente, ela é encaminhada a caldeiras recuperadoras de calor, onde produzem
vapor de água de alta pressão, resfriando os gases de combustão antes dos
mesmos serem lançados à atmosfera.
A Figura 4 mostra em termo de diagrama de blocos todas as interligações das
várias seções do processo de Craqueamento Catalítico Fluido.
Figura 4 – Diagrama de Blocos do Craqueamento Catalítico
2.3.2: Produtos de Craqueamento
2.3.2.1: Gás Combustível
É composto basicamente de hidrogênio, metano, etano e eteno. Além desses,
podemos encontrar também, em menores proporções, outros gases, como o
propano, propeno, n-butano, iso-butano, n-buteno, iso-buteno, CO, CO2, N2. Os três
últimos compostos citados são provenientes do arraste de gás de combustão pelo
catalisador regenerado.
16
Há também uma proporção variável de H2S, gerado pelas reações de
craqueamento dos compostos sulfurados presentes na carga. Este gás, porém, é
removido da mistura gasosa pelo tratamento DEA, de tal modo que o gás
combustível sai praticamente isento de H2S. Este, conhecido como gás ácido, é
enviado à unidade de recuperação de enxofre (URE), onde esse elemento é
produzido.
2.3.2.2: Gás Liquefeito de Petróleo (GLP)
O GLP de Craqueamento basicamente é composto de propano, propeno,
butanos e butenos. Em menores proporções ocorre também a presença de etanos e
pentanos. De forma similar ao gás combustível, também há ocorrência de H2S, que
é eliminado pelo tratamento DEA. Outros compostos de enxofre podem estar
também presentes, tendo seus teores reduzidos através do tratamento Merox.
A Unidade de FCC é a principal responsável pela geração do gás liquefeito
nas refinarias. Especificamente no Brasil isto é de extrema importância, devido ao
grande consumo desse derivado que temos no país.
2.3.2.3: Nafta de Craqueamento
A nafta produzida no FCC, devido à sua composição, é um excelente
componente para a produção de gasolina. Ela é rica em olefinas, isoparafinas e
aromáticos, sendo pobre em naftênicos e n-parafinas. Esta proporção de
hidrocarbonetos conduz a uma gasolina de bom índice de octanagem, bastante
superior aos valores de naftas de destilação e de processos térmicos de conversão.
O teor de enxofre de nafta de craqueamento é alto, necessitando submetê-la
ao tratamento Merox, que reduz o teor daquele elemento, além de diminuir-se e
enquadrar-se devidamente a corrosividade. O elevado valor de enxofre é devido ao
alto teor desse elemento presente na carga. Quando craqueamos cargas com
resíduos, o problema tende a se agravar devido à maior quantidade de enxofre de
natureza aromática, que o tratamento Merox não consegue remover.
O rendimento da gasolina no craqueamento varia de 50 a 65% do volume.
17
2.3.2.4: Óleo Leve de Craqueamento (LCO)
O Óleo Leve de Craqueamento (Light Cycle Oil – LCO) é uma fração cuja
faixa de destilação é aproximadamente a do óleo diesel. Ele é constituído de uma
elevada concentração de aromáticos bi e tri nucleados com ramificações, além de
grandes quantidades de olefinas e diolefinas de longas cadeias. Em função dessa
composição, seu número de cetano é baixo, não sendo aproveitado como óleo
diesel.
2.3.2.5: Óleo Decantado
O Óleo Decantado, também conhecido como Óleo Clarificado (ClO), Óleo
Combustível de FCC e Resíduo de Craqueamento, é como o último nome indica, o
produto líquido mais pesado das reações de craqueamento.
Este produto é riquíssimo em hidrocarbonetos aromáticos polinucleados, com
algumas ramificações e olefinas pesadas também ramificadas. Seu maior uso em
refinarias é, à semelhança do LCO, servir como diluente do resíduo de vácuo para a
produção de óleos combustíveis. O Óleo Clarificado, embora bastante denso, é
muito menos viscoso que os resíduos de vácuo.
Devido à elevada aromaticidade, ele tem também uma alta relação
carbono/hidrogênio. Por isso, conforme sua característica, ele pode ser enquadrado
como Resíduo Aromático (RARO), produto este que pode ser vendido às indústrias
petroquímicas especializadas em produção de negro de fumo (carbono coloidal
finamente dividido). O negro de fumo é utilizado como carga para produção de
pneus, plásticos, pigmentos pretos, etc.
2.3.2.6: Gás Ácido (H2S)
A corrente de gás ácido é proveniente do tratamento de gás combustível e do
GLP pela Unidade de Tratamento DEA, sendo rica em H2S, ela é enviada para ser
processado numa URE. O rendimento de gás ácido é bastante variável em função
do tipo de carga processada e das condições de severidade das reações de
craqueamento.
18
Devido ao seu alto poder calorífico, sua facilidade de queima, seu caráter
antipoluente (em virtude do baixo teor de enxofre) e sobretudo porque – caso não
seja utilizado – será queimado na tocha, o gás combustível é largamente consumido
em fornos e caldeiras das diversas unidades da refinaria.
2.3.3: Catalisadores para FCC
O catalisador de craqueamento em leito fluidizado desempenha três funções
principais no processo:
ƒ
Promotor das reações de craqueamento – esta é a principal função do
catalisador no processo. Ele promove a ocorrência de reações de quebra em
condições bem mais suaves do que aquelas requeridas ao craqueamento
térmico. Além disso, a quantidade e a qualidade dos produtos são bastante
superiores ao processo realizado na ausência de catalisador.
ƒ
Agente de transporte de coque – o carbono depositado na superfície do
catalisador é transportado do reator ao regenerador, onde é queimado,
produzindo energia, sendo esta a principal fonte de calor do processo. Este
efeito é muito importante, pois caso não houvesse o catalisador, o coque
formado tenderia a se depositar no interior dos vasos de reação, acabando
por provocar entupimentos, reduzindo, em conseqüência, o tempo de
operação contínua da unidade. Isto se observa constantemente no
craqueamento térmico.
ƒ
Agente de transferência de calor – o calor gerado pela queima do coque no
regenerador é parcialmente utilizado no aquecimento do catalisador, elevando
sua temperatura em 100 a 350°C. A circulação do catalisador retira esta
energia do regenerador e a utiliza para aquecer e vaporizar a carga, de modo
a possibilitar e manter as reações de craqueamento.
2.3.4: Carga para Craqueamento
A carga enviada a uma unidade de craqueamento constitui-se em uma das
mais relevantes variáveis deste processo. Suas características influenciam
diretamente na conversão, e em conseqüência, na qualidade e quantidade dos
produtos obtidos pela quebra das moléculas.
19
A qualidade da carga é determinada pelos vários tipos e quantidades de
hidrocarbonetos que a constitui, assim como as impurezas que nela estão presentes.
A composição da carga, por sua vez, é influenciada pelas características do petróleo
original e do seu refino. A carga é constituída de hidrocarbonetos parafínicos,
olefínicos, naftênicos e aromáticos nas suas diversas formas e arranjos, além de
outros compostos de caráter orgânico ou não, classificados como impurezas. Dentro
deste último grupo, encontram-se os compostos orgânicos de nitrogênio, oxigênio e
enxofre, juntamente com pequenas quantidades de metais pesados (níquel, cobre,
ferro e vanádio) e alcalinos (sódio, potássio e cálcio).
2.3.5: Variáveis Operacionais
O FCC é um processo no qual devem existir três equilíbrios simultâneos em
sua operação:
ƒ
Equilíbrio de calor: o excesso de geração de energia causa elevadas
temperaturas, causando danos ao equipamento e ao catalisador. A baixa
geração de energia causa temperaturas insuficientes do catalisador, fazendo
com que as reações não ocorram corretamente.
ƒ
Equilíbrio de pressões: é fundamental para que o catalisador circule
corretamente e não ocorra inversão do fluxo.
ƒ
Equilíbrio químico: também chamado de equilíbrio de coque ou balanço de
carbono, consiste na queima do coque gerado na reação. A insuficiência da
queima de coque causa um acúmulo deste no catalisador, o que afeta as
conversões. Por outro lado, a insuficiência na geração de coque afeta o
balanço térmico.
Assim, o Craqueamento Catalítico é um processo bastante complexo devido à
quantidade de variáveis que estão envolvidas. Podem-se classificar as variáveis
operacionais em dois grandes grupos: variáveis independentes (ou de ação direta),
nas quais se atua através de um controlador e variáveis dependentes (ou de ação
indireta), que são alteradas em conseqüência da mudança de alguma variável
independente.
Pode-se citar como variáveis independentes: vazão de carga fresca,
qualidade da carga fresca, atividade do inventário de catalisador, temperatura do
20
reator, etc. Como variáveis dependentes podem-se citar: conversão, rendimento dos
produtos, razão catalisador/óleo, circulação de catalisador, tempo de contato,
temperatura da fase densa do regenerador, vazão de ar para combustão, etc.
2.4: Unidade Multipropósito de FCC – U144
Plantas multipropósito são unidades de testes que visam reproduzir condições
operacionais reais. Estas unidades, de porte intermediário entre uma unidade piloto
e protótipo, buscam representar os fenômenos de um processo, sendo adequadas
para estudos de otimização de processos e equipamentos. Entre os objetivos de
uma unidade multipropósito podemos citar:
ƒ
Aquisição de dados experimentais para desenvolvimento de modelagem
matemática e simulação do processo.
ƒ
Desenvolvimento de equipamentos e sistemas.
ƒ
Estudo de processos em novas condições operacionais, por exemplo,
alteração das vazões processadas e de catalisadores.
2.4.1: Descrição Geral
A unidade de FCC visa o aproveitamento de certas frações de petróleo,
transformando-as em frações nobres, como GLP e Gasolina. A unidade
multipropósito estuda, por sua vez, o comportamento do processo, considerando
variáveis como: temperatura, pressão, catalisador, tempo de contato, etc.
As principais características da planta são:
ƒ
Carga entre 60 e 300 kg/h;
ƒ
Temperatura de reação entre 460 e 580 ºC;
ƒ
Temperatura de carga entre 100 e 350 ºC;
ƒ
Pressão do reator entre 1,0 e 2,5 kgf/cm2 man;
ƒ
Temperatura de regeneração entre 600 e 730 ºC.
21
Figura 5 – Unidade Multipropósito de FCC
A planta é monitorada por um SDCD – Sistema de Controle Distribuído, que
conta com inúmeros indicadores de pressão, temperatura, diferenciais de pressão
com grandes facilidades de acompanhamento.
O riser apresenta quatro pontos de injeção da carga, permitindo variar o
tempo de contato entre 0,5 e 3 segundos com qualquer tipo de carga.
2.4.2: Fluxo de Catalisador
O catalisador percorre um circuito fechado dentro do conversor. O
escoamento se torna possível por toda a massa estar em estado fluidizado, o que se
consegue com ar, hidrocarbonetos vaporizados e vapor de água.
O catalisador regenerado e aquecido escoa do regenerador para a base do
riser. Ao entrar em contato com a carga, fornece calor vaporizando-a, sendo então
arrastado pelos vapores de hidrocarbonetos e vapor de água, através do riser onde
ocorrem as reações de transformação da carga, agregando-se o coque ao
catalisador.
Na saída do riser o fluxo passa por ciclones onde há a separação
catalisador/produtos. O catalisador escoa pelas pernas dos ciclones e deposita-se
22
no stripper onde passa por um processo que utiliza vapor de água para a retirada
dos hidrocarbonetos que podem estar presentes no catalisador.
Do stripper o catalisador escoa por uma tubulação para o regenerador, onde
em contato com o ar queima o coque agregado durante as reações, completando-se
o ciclo.
2.4.3: Fluxo de Carga
A carga é pré-aquecida a certa temperatura. A seguir é enviada para os bicos
dispersores, entrando no riser e vaporizando em contato com o catalisador.
Após a passagem pelo riser e pelos ciclones, o gás separado do catalisador
passa para a primeira etapa de condensação. A seguir passa por um segundo
permutador de calor, onde o óleo condensado é armazenado nos tanques e a
corrente gasosa mais os hidrocarbonetos leves passam por um condensador a
freon. O fluxo segue então para os tanques de selagem e em seguida para o flare
onde os gases são queimados.
A carga pode ser injetada no riser em quatro pontos distintos, com o objetivo
de alterar o tempo de contato com o catalisador, como já citado.
Os produtos armazenados durante o teste são amostrados e transferidos para
o tanque de produtos.
2.4.4: Fluxo de Ar
Passando por um aquecedor, o fluxo é aquecido e direcionado para a base do
regenerador onde, através de uma placa distribuidora, entra no equipamento
promovendo a fluidização e queima do coque no catalisador, regenerando-o.
Os gases formados no regenerador passam por ciclones para a separação de
partículas arrastadas do leito, que são devolvidas ao regenerador. O fluxo isento de
sólidos é lançado na atmosfera.
23
2.4.5: Fluxo de Vapor
ƒ
Vapor de Lift: É o vapor utilizado para acelerar o catalisador na base do riser.
O vapor é condensado por um sistema de condensação sendo posteriormente
separado do óleo.
ƒ
Vapor de dispersão: É o vapor utilizado para atomizar a carga. Entra no “riser”
pelos bicos dispersores, seguindo também com os produtos para o sistema
de condensação sendo posteriormente separado.
ƒ
Vapor de “estripagem”: É utilizado para remover os hidrocarbonetos presentes
no catalisador, sendo que estes e o vapor saem pelo topo do stripper
somando-se ao fluxo de produtos, seguindo então para o sistema de
condensação.
2.4.6: Fluido de Selagem
Ar e gás inerte servem como fluidos de selagem para o processo em linhas e
válvulas. O gás inerte é pressurizado e armazenado em um vaso pulmão, onde um
compressor garante sua pressão na saída.
2.4.7: Amostrador de Topo e Sistemas de Condensação
Após o craqueamento, sai do riser uma mistura contendo vapores de
hidrocarbonetos, vapor de água, gases e catalisador gasto (com coque). Esta
mistura segue para dois ciclones em série, nos quais o catalisador gasto é separado.
A corrente que segue ao topo da unidade é então composta apenas de vapores e
gases, sendo que uma parte desta segue para o sistema de condensação e outra
parte é desviada para o Amostrador de Topo ou RMS (Reactor Mixer Sampler –
Amostrador da Mistura de Produtos do Reator).
No amostrador de topo, a corrente passa por um permutador a ar,
condensando parte do óleo, que é coletado em um tanque. O restante da corrente
passa por um permutador a água, condensando uma fração menos pesada de óleo,
coletado também no tanque. Finalmente, a mistura não condensada segue para uma
torre de recheio, na qual a neblina restante, que passou com esta corrente, é retida.
O último permutador utiliza freon, sendo condensada a parte mais leve do óleo. O
24
gás resultante é coletado e levado para a análise cromatográfica. O óleo (composto
de todas as frações condensadas) também é encaminhado ao laboratório para a
destilação simulada. Para medir a quantidade de gás que passa pelo amostrador de
topo, existe um medidor MGU (Medidor de Gás Úmido).
A outra parte da corrente que sai do ciclone e que não foi desviada ao RMS,
passa por um sistema de condensação semelhante ao do Amostrador de Topo,
porém com os dois primeiros permutadores a água. A vazão de gás é indicada pelo
SDCD, tem sua amostra coletada para análise cromatográfica e é depois queimada
no flare. O óleo condensado é coletado em um tanque, e depois de separado de
grande parte da água, é levado ao laboratório para análise de destilação simulada.
Um fluxograma da Unidade Multipropósito de Craqueamento Catalítico Fluido
encontra-se no Anexo A.
25
Capítulo 3: O Sistema PI
O sistema PI (Plant Information) é um conjunto de módulos de software
servidor/cliente desenvolvidos para automatizar totalmente a coleta, armazenamento
e apresentação das informações da planta de um processo, gerenciando essas
operações. Assim, o sistema PI é freqüentemente utilizado como uma integração e
plataforma de desenvolvimento de largas aplicações, tornando-se a ligação principal
entre a área industrial e o escritório.
Ele foi desenvolvido para executar a monitoração e análise de plantas de
processo, servindo como servidor de dados para aplicações cliente. Operadores,
engenheiros e gerentes podem usar as aplicações clientes para visualizar os dados
armazenados no servidor PI.
O PI um sistema que engloba todas as interfaces e ferramentas necessárias
para apresentar em tempo real os inúmeros dados que provêm de dispositivos
normalmente encontrados numa planta. Atualmente o sistema PI conta com mais de
350 interfaces para mais de 500 sistemas de controle.
Muitos nomes são utilizados para fazer referência a essa coleção de módulos
de software. Neste documento, em geral, sistema PI ou simplesmente PI, refere-se
ao sistema como um todo. O servidor ou nó primário é chamado de servidor PI.
O servidor colhe a informação dos nós de coleta de dados, que são
designados para pegar informação diretamente do processo de produção, e
compartilha os dados com a organização, localmente e/ou remotamente.
Figura 6 – Fluxo dos Dados
26
O fluxo de dados se dá do processo de produção para o sistema de PI. A
Figura 6 ilustra como os dados fluem do sistema de controle para dentro do arquivo
de dados do servidor PI.
A arquitetura do sistema é o que faz o sistema PI tão robusto e valioso. Tudo
começa com a camada de informações da planta ou do processo de produção, onde
o servidor PI coleta os dados de um número qualquer de fontes. Este servidor, assim
como as bases de dados que estão associadas a ele, é otimizado para realizar a
coleta de informações.
Figura 7 – Arquitetura do Sistema PI na SIX
27
3.1: O Armazenamento dos Dados
O sistema de armazenamento dos dados do sistema PI é o PI Data Archive,
arquivo de dados, onde as informações obtidas do processo de produção são
armazenadas.
Para cada variável de processo a ser rastreada, um ponto é definido no
sistema PI. Cada ponto tem aproximadamente 50 atributos. Estes atributos definem
como os dados são coletados e armazenados.
Figura 8 – Processamento de Informações Novas
Observa-se na Figura 8 como no sistema PI o valor mais recente para cada
ponto é conhecido por snapshot, que é uma estrutura de dados na memória principal
que retém só o valor atual de cada ponto, e representa o primeiro destino dos dados
à medida que são coletados.
Figura 9 – PI Snapshot Subsystem
28
O segundo destino dos dados são os arquivos de dados do servidor que são
armazenados em disco. Antes dos dados serem armazenados em arquivo eles
podem ser filtrados eletronicamente e estatisticamente. O primeiro desses processos
ocorre no nó ou ponto de coleta dos dados e é chamado de Teste de Exceção,
enquanto o outro é executado pelo próprio servidor PI sendo chamado de
Compressão de Dados. Um esquema sucinto desses processos pode ser
visualizado nas Figuras 10 e 11.
Figura 10 – Fluxo da Exceção à Compressão
Figura 11 – Exemplo do Processo de Filtragem dos Dados
3.1.1: Buferização dos Dados
O sistema de buferização dos dados do sistema PI é composto de dois
buffers de memória (primário e secundário) e um buffer de disco.
Figura 12 – Sistema de Buferização
29
A buferização está sempre ativada quando a interface que coleta dados do
SDCD está conectada ao servidor PI, só o buffer primário de memória é ativado,
assim todos os dados são armazenados no buffer primário. Quando a conexão com
o servidor PI é perdida o buffer secundário é ativado. A buferização no disco rígido
apenas é ativada depois que o buffer secundário de memória estiver cheio. A
buferização no disco rígido é utilizada até que o tamanho máximo de arquivo,
previamente determinado, seja atingido.
3.1.2: Teste de Exceção
Uma variável viola o teste de exceção se seu valor difere do valor anterior por
ExcDev (Exception Deviation Specification) ou se o tempo desde a última exceção
for maior ou igual ao ExcMax (Maximum Exception Time). Além disso, nenhum valor
é informado até que o ExcMin (Minimum Exception Time) tenha sido excedido desde
a última exceção. Quando uma variável viola o teste de exceção, então o valor que
violou o teste e o valor anterior são informados.
Figura 13 – Como funciona o Exception Report
3.1.3: Compressão dos Dados
O objetivo da compressão dos dados é manter a tendência original dos
mesmos usando o menor número de pontos, salvando dessa forma espaço em
disco, e mantendo ao mesmo tempo uma precisão extremamente alta sem a
necessidade de armazenar toda a amostra de dados ou de ter que recorrer ao
30
cálculo da média ou a técnicas de amostragem periódica para determinar a
tendência dos mesmos.
Figura 14 – Parâmetros de Compressão
A compressão de dados é similar ao teste de exceção onde somente uma
mudança significativa em relação ao valor anteriormente arquivado é armazenada.
Figura 15 – Primeiro Passo da Compressão de Dados
A Figura 15 mostra como o sistema usa o parâmetro CompDev (Compression
Deviation) para "desenhar" um paralelogramo do último ponto arquivado até o valor
atual. A largura do paralelogramo é duas vezes o valor CompDev (um valor de
desvio para cima e um para baixo).
Nesse caso a primeira "zona morta" é desenhada em volta do primeiro ponto
e estendida até o próximo ponto e aos pontos consecutivos. Tal zona também é
chamada de cobertura de compressão.
31
Quando qualquer valor fica fora da cobertura de compressão, (fora dos
paralelogramos), o PI armazena um valor no PI Data Archive, como pode ser
observado nas ilustrações a seguir.
Figura 16 – Zona Morta da Compressão
O sistema PI não armazena o valor que cometeu a violação, ao invés disso,
ele armazena o valor anterior.
Figura 17 – Determinação do valor a ser armazenado
Na figura o valor obtido em 12:01:45 viola o teste e o valor de 12:01:30 é
arquivado.
O processo de compressão de dados reinicia novamente a partir do valor que
acabou de ser armazenado, como pode ser verificado na Figura 18.
32
Figura 18 – Compressão dos Dados
Finalmente o processo de compressão termina para o exemplo citado. Os
valores circulados são os que serão armazenados em arquivo.
Figura 19 – Resultado Final da Compressão dos Dados
Note que PI não armazena exatamente o que aconteceu, mas sim um bom
senso do que ocorreu com os dados. A precisão da tendência dos pontos
armazenados depende do valor escolhido como desvio de compressão, o CompDev.
3.2: Tags
Cada tag possui uma localização única no sistema PI, e deve ser utilizado
para armazenar fluxos individuais de dados, por exemplo: o fluxo em uma tubulação,
um modo de controlador em operação, um comentário em forma de texto, os
resultados de um totalizador, qualquer coisa que possa ser medida pode ser
capturada utilizando um tag do PI como uma definição.
33
Cada tag do PI tem uma série de atributos para descrever as partes
diferentes do sistema. Estes atributos podem ser resumidos pela pergunta que cada
definição tenta responder, como:
•
descrever o tag para uma aplicação cliente e para o usuário, determinando
como a informação deve ser exibida;
•
descrever o tag para a interface, determinando como e onde a interface
deve coletar a informação para a qual está destinada;
•
descrever o tag para o servidor PI, determinando como o servidor deve
armazenar a informação.
Os tags possuem certos atributos que controlam como os dados são exibidos
e manipulados dentro do sistema. Alguns dos atributos mais importantes são:
•
Tag name: nome único destinado a cada variável monitorada;
•
Descriptor: descrição do tag com no máximo 26 caracteres;
•
Point Source: permite agrupamento dos tags segundo a interface de dados
utilizada (SDCD, CLP, ou outras fontes). O valor padrão é K para pontos
da Pesquisa;
•
Zero, Span e Typical value: valor mínimo, escala e valor típico;
•
Step: mostra a informação como ZOH (Zero Order Holder – Interpolação
de Ordem Zero) ou como uma interpolação linear;
•
Location#: define o endereço da informação no SDCD:
o Location1: contém o número da interface, normalmente, o
número da interface deve coincidir com o número lógico utilizado
pelo software da ABB/Bailey;
o Location2: deve ser igual a (INFI90 Loop Number * 256) + PCU
Number;
o Location3: INFI90 Module Number;
o Location4: INFI90 Block Number;
o Location5: especifica o tipo de ABB/Bailey Point Type que será
lido, com por exemplo: analog, digital, station, RCM, etc.
34
•
PtOwner, PtGroup, PtAccess: controla os usuários que podem modificar
ou ver os atributos dos tags;
•
DataOwner, DataGroup, DataAccess: controla quem pode ler ou escrever
dados;
•
Compression Specification: controla como a informação é arquivada;
•
Exception Specification: controla como os dados e o ruído são filtrados
para obter-se um fluxo de dados limpo e significante.
3.3: Acesso aos Dados
O sistema PI permite a coleta de dados através de uma grande variedade de
nós de rede. Essa estrutura distribuída oferece muitas vantagens sobre uma
estrutura monolítica, incluindo escalabilidade, robustez e flexibilidade.
Ele dispõe de ferramentas que possibilitam a criação de novos aplicativos
para realizar o acesso aos dados, como:
•
PI-API (Application Program Interface - C-style function library)
•
PI-SDK (Software Development Kit - COM-based object oriented module)
•
PI ODBC / PI OLEDB
•
PI Interfaces (Read/Write Interfaces - exemplo: interface semAPI)
3.3.1: PI-API
O PI-API provê uma interface comum de programação para o sistema PI. É
uma biblioteca de funções que permite acessar o sistema PI para leitura e gravação.
A própria OSIsoft (fabricante do PI System) utiliza essa biblioteca para criar as
interfaces para várias plataformas.
Usuários licenciados podem criar suas próprias aplicações fazendo uso dela.
O PI-API é uma biblioteca de funções que pode ser chamada a partir de linguagens
de programação como C, C++, Visual Basic, Delphi, etc. Estas funções permitem ler
e escrever valores no servidor PI, além de alterar ou obter configuração de pontos.
35
Figura 20 – Máquina Cliente com PI-API
Todas as aplicações clientes da OSIsoft são escritas usando o PI-API, o PISDK ou uma combinação dos dois para comunicação com o servidor PI. Elas
comunicam-se com o servidor PI através do protocolo de rede TCP/IP. Entre os
softwares clientes disponibilizados pela OSIsoft estão: PI-ProcessBook, PI-DataLink,
PI-BatchView, PI-SQC, etc.
O arquivo "piapi32.bas" contém todas as funções, procedimentos e definições
de tipos de variáveis da biblioteca PI-API. As funções do PI-API são divididas em
grupos:
•
PIAR:
Archive functions (read and write)
•
PIBA:
PI Batch functions
•
PIEL:
Event Log functions
•
PILG:
Common dialog boxes & Message logging
•
PIPT:
Point database functions
•
PISN:
Snapshot functions (read and write)
•
PITM:
Time functions
•
PIUT:
Utility functions
36
3.3.2: Utilitários Clientes
Podem-se utilizar as aplicações clientes do PI para acessar os dados
armazenados no servidor: PI-ProcessBook, PI-DataLink, PI-ManualLogger, PIControlMonitor, PI-BatchView, PI-ActiveView, PI-SQC, PI-SMT, PI-AlarmView, etc.
•
PI-ProcessBook: aplicação que possibilita ao usuário construir e visualizar
telas de processos, gráficos e valores das variáveis envolvidas. É um
pacote gráfico fácil de utilizar, que permite criar gráficos dinâmicos,
gráficos interativos mostrando dados em tempo real. Também permite que
sejam criadas telas de processo para acompanhamento em tempo real.
•
PI-DataLink: add-in para Microsoft Excel que possibilita a visualização de
valores do sistema PI de diversas formas, bem como copiá-los para uma
planilha para realizar análises adicionais. As funções do PI-DataLink são
acessadas dentro do Microsoft Excel por um menu que aparece depois
que o add-in é instalado. Com PI-DataLink, um usuário pode trocar
informação diretamente com o banco de dados do PI. Essa ferramenta
combinada com a funcionalidade da planilha eletrônica faz com que o PIDataLink seja um utilitário poderoso e fácil de usar por reunir, analisar e
relatar dados do PI.
Existem ainda ferramentas de gerenciamento do Sistema PI (PI System
Management Tools), como o PI Tag Configurator e o PI Point Builder.
•
PI Tag Configurator: add-in para Microsoft Excel para criação e
manutenção de tags.
•
PI Point Builder: aplicação para criação de tags e manutenção de tabela
de estados digitais.
37
Figura 21 – PI Tag Configurator – add-in para Microsoft Excel
Figura 22 – PI Point Builder
38
3.3.3: Interface semAPI
Interfaces são módulos de software para coleta de dados de sistemas
externos, como pode ser visto na Figura 23 .
Figura 23 – Interface – Intermediador na Coleta de Dados
As origens típicas de dados são SDCDs, CLPs, e sistemas de laboratório. A
interface utilizada na coleta de informação da Unidade de FCC onde o trabalho foi
desenvolvido chama-se ABB/Bailey semAPI.
A interface é o dispositivo necessário para realizar a comunicação entre o
processo de produção e o servidor PI. Essa função pode ser facilmente identificada
na figura a seguir.
Figura 24 – Esquema do Interfaceamento ABB/Bailey-PI semAPI
39
A comunicação utilizando a interface semAPI exige o software semAPI RunTime da ABB/Bailey, o módulo de interface com o computador, e ainda o software
Blysem da interface PI-Bailey semAPI da OSIsoft.
O semAPI Run-Time da ABB/Bailey manipula em baixo nível os protocolos de
comunicação e o trânsito de dados da rede INFI90 da ABB/Bailey, disponibilizandoos em alto nível para a interface. Isto é necessário uma vez que os protocolos de
baixo nível são proprietários e sua documentação não é fornecida por se tratar de
segredo industrial.
A interface trabalha com o módulo de interfaceamento com o computador
INICI03 que é conectado ao computador via conexão SCSI. O módulo INICI03
consiste de três módulos: INICT03 Computer Transfer, INNIS01 Network Interface,
IMMPI01 Multifunction Processor Interface.
Figura 25 – Módulo/Cartão de Comunicação INICI03
A interface PI-Bailey semAPI fornece uma transferência de dados bidirecional
entre o sistema PI e a rede ABB/Bailey INFI90. Essa interface foi desenvolvida para
tirar proveito da biblioteca semAPI da ABB/Bailey. A interface controla todo o
protocolo de comunicações da ABB/Bailey, tornando assim possível que o sistema
PI se comunique com os módulos INICI da ABB/Bailey por uma série de métodos
como: conexão serial, Ethernet, e SCSI.
40
Figura 26 – Estrutura do Interfaceamento ABB/Bailey-PI semAPI
Todos os dados lidos pela interface vêm de relatórios de exceção do sistema
ABB/Bailey, que gera um relato de exceção sempre que o valor ou status de uma
variável muda, ou quando um limite específico de tempo foi atingido desde o último
relato.
A topologia de rede usual utilizada pela interface é a ponto-a-ponto, sendo
que o software semAPI e o processo da interface estão no mesmo computador. O
computador é fisicamente conectado por um cabo SCSI ao cartão de comunicação
da ABB/Bailey, e este cartão está conectado à rede INFI90 da ABB/Bailey.
3.3.3.1: Seqüência de Ações da Interface
A seqüência de operações da interface após a inicialização é a seguinte.
•
A interface obtém todos os tags de um respectivo PointSource e processa
somente aqueles tags cujo atributo onde é descrito o número da INICI
coincide com aquele que foi passado para ela como parâmetro na sua
inicialização. No caso da U144, o PointSource é “K” e o número da INICI é
2. A interface cria então uma lista indexada pelo número do pointID da lista
de tags.
41
•
A interface tenta iniciar a comunicação com o módulo de comunicação da
ABB/Bailey. Quando a comunicação é estabelecida, a interface cria um
device driver que manipula fisicamente e em baixo nível os protocolos de
comunicação.
•
A interface então estabelece os tags na tabela do módulo de comunicação
da ABB/Bailey. Após todos os dados serem estabelecidos e conectados, a
interface entra na fase de coleta de dados.
•
A interface mantém a leitura dos exception reports até o número máximo
de exceções especificada na inicialização da interface.
•
Se mais de dois minutos se passarem desde a última leitura na tabela de
pontos, a interface verifica se houveram alterações nesta tabela e
promove então a alteração em sua tabela interna, adicionando, deletando
ou atualizando os atributos dos pontos.
•
Os dois últimos passos são repetidos continuamente enquanto a interface
estiver rodando.
•
Se a interface encontrar dez erros consecutivos durante a coleta de dados,
então ela volta para o início do procedimento, tentando iniciar a
comunicação com o módulo de comunicação da ABB/Bailey.
3.3.3.2: Inicialização da Interface
A interface permite que a sua inicialização seja customizada visando atender
às necessidades de cada sistema. Os parâmetros mais importantes a serem
especificados no script de instalação da interface são os seguintes:
/host=X
especifica o nome do host do PI Server
/id=X
ID da Interface
/ps=X
pointsource para a interface
/ec=X
contador da taxa de I/O
/sn
ao usar este parâmetro haverá tratamento de exceção do PI sobre
os exception reports da ABB/Bailey
/in=X
número da interface, deve coincidir com o atributo location1 da
configuração dos tags do PI
/ici=X
número da ICI da ABB/Bailey
/to=X
ICI timeout (O cartão de comunicação fica offline após não
receber mensagem da interface por este período)
/fm=X
modo de redundância , 1 primária, 2 for secundária
42
/dl=X
intervalo entre varredura das exceções da ABB/Bailey
/me=X
número máximo de exceções por interação
/mp=X
número máximo de pontos para esta interface
/ef=X
exception screening 0=default=não
/ts=X
sincronização de tempo 1 -> pi master, -1 -> ABB/Bailey master
/f=X
taxa de scan
3.4: Sistema de Controle Distribuído – SDCD
O Sistema de Controle Distribuído – SDCD, muito embora não faça parte do
sistema PI como um todo, é o responsável pela coleta de dados tanto analógicos
quanto digitais na área de produção. Os dados enviados para o SDCD pelos
dispositivos de campo são os mesmos repassados em tempo real para interface que
enviará os dados para o PI Data Archive. Assim, faz-se necessário uma explicação
sucinta do que é o Sistema de Controle Distribuído.
O SDCD, lançado em meados da década de 70, tinha a função de
automatizar uma planta por completo, substituindo os painéis dos controladores
(variáveis analógicas) assim com os de relés (variáveis digitais).
Os SDCDs, flexibilizaram o tamanho de seu hardware de forma a atender
aplicações de pequeno/médio portes e também “abriram” o seu sistema viabilizando
a comunicação com qualquer hardware/software do mercado. Eles foram concebidos
de forma a permitir a escalabilidade do sistema e também a operação ininterrupta do
processo, possibilitando a inclusão de cartões de I/O e a redundância dos mesmos
sem a parada da CPU do sistema.
Os Sistemas de Controle Distribuído têm sido usados em aplicações que
exigem um controle de processo em larga escala, onde é possível rodar várias
operações complexas para uma variada gama de processos diferentes.
A utilização de SDCDs reduziu o uso de computadores centralizados, e,
dentro deste conceito distribuiu a IHM (Interface Homem Máquina), o controle lógico
e a base de dados em diferentes placas de circuito dentro do computador, reduzindo
assim o risco de falhas do sistema como um todo.
43
Capítulo 4: Etapas do Trabalho Desenvolvido
O trabalho desenvolvido no setor de Pesquisa da Unidade de Industrialização
do Xisto, dividiu-se em etapas. De maneira geral, após a conclusão de cada etapa
proposta, novos desafios foram sendo sugeridos.
4.1: Instalação e Configuração da Interface
O principal problema no início do trabalho desenvolvido na SIX foi identificado
na interface de coleta de dados do sistema PI, que não estava coletando
corretamente os dados provenientes do SDCD. O problema poderia estar
relacionado:
•
aos softwares instalados no computador da interface;
•
ao hardware da interface;
•
ao cabo SCSI conectado ao SDCD;
•
ou ainda, ao próprio cartão de comunicação INICI03 do SDCD.
Devido à urgência de solução do problema da interface, deu-se início a um
estudo específico sobre a instalação e a configuração da mesma.
A instalação dos softwares e hardwares da ABB/Bailey foi realizada
anteriormente pelo serviço de suporte da mesma em um computador destinado a ser
a interface entre o SDCD e o servidor PI, o qual estava localizado ao lado do
gabinete do SDCD.
Primeiro foi realizada a instalação do cartão de comunicação INICI03 no
gabinete do SDCD da U144. Depois se deu a instalação de placa SCSI 2940 na
interface e seus respectivos drivers com a interligação da placa com o hardware do
gabinete através de cabo SCSI padrão. Por último ocorreu a instalação do software
semAPI Run-Time da ABB/Bailey.
Junto com o pacote semAPI Run-Time da ABB/Bailey, o programa ICICONF
tem como aplicabilidade definir um ICI lógico para cada módulo INICI instalado.
44
O software key é um alfa-numérico longo e o user string é normalmente igual
a "LICENSE01". Esses dois parâmetros são fornecidos pela ABB/Bailey. Eles
precisam ser inseridos em três lugares. A chave do software deve ser inserida no
aplicativo LICENTRY. E o user string precisa ser inserido tanto no aplicativo
LICENTRY como no ICICONF. Se os parâmetros corretos não forem utilizados, a
interface não conseguirá conectar ao cartão de comunicação INICI.
Figura 27 – Tela do LICENTRY
No computador da interface está instalado o aplicativo ICICONF, que define o
ICI lógico para cada módulo INICI. Ao tentar-se descobrir por que a interface não
estava coletando os dados corretamente, um dos problemas detectados foi a má
configuração do aplicativo ICICONF que foi então configurado como na Figura 28,
onde:
•
Application Logical ICI = 2 (isso porque na produção já existe um ICI lógico
denominado 1)
•
Physical ICI Device = S000: (endereçamento reconhecido pela interface
para o cartão de comunicação ao qual ela está conectada por um cabo
SCSI)
45
•
Physical Connection Type = SCSI (o computador da interface possui uma
placa SCSI conectada por um cabo SCSI ao cartão de comunicação
INICI03 do SDCD)
•
Name/Address of Node = P28110179L (é o nome do computador da
interface reconhecido pela rede corporativa TCP/IP. Aqui também poderia
ser definido o IP da máquina ao invés do nome).
•
Network Communication Protocol = TCP/IP (tipo de rede de comunicação
entre a interface e o servidor)
•
License String = LICENSE01 (nome do arquivo *.sla que contém os dados
da licença da interface)
•
TCP/IP Port = 3001 (número da porta utilizada para comunicação).
Figura 28 – Tela do ICICONF
Após a realização da configuração correta do aplicativo ICICONF, deu-se
continuidade ao trabalho que envolveu três etapas distintas:
•
Instalação do PI-API, um pré-requisito para a instalação da interface, e do
sistema de buferização da interface semAPI, efetuado durante a instalação
do PI-API.
46
•
Instalação da interface PI-Bailey semAPI (blysem.exe) com os parâmetros
específicos para a o sistema ABB/Bailey da pesquisa, com a configuração
do startup da interface.
•
Adequação da tabela de proxys do servidor para permissão de acesso da
interface ao servidor (etapa realizada pelo responsável pelo servidor PI da
SIX).
A instalação do PI-API foi simples, de forma que apenas bastou seguir os
passos definidos pelo arquivo de setup, não envolvendo qualquer segredo. O
procedimento de instalação da interface PI-Bailey semAPI foi o seguinte:
•
Criou-se
o
diretório
C:\PI\interfaces\blysem#\,
onde
“#”
deveria
corresponder ao número da interface que foi especificado usando o
parâmetro /id no arquivo blysem#.bat. Foram copiados os arquivos
blysem.exe e blysem.bat para o disco rígido, de forma que os dois foram
chamados de blysem#.exe e blysem#.bat, de acordo com o que foi
mencionado acima. As linhas de comando do arquivo blysem#.bat foram
configuradas para customizar a interface.
O código do arquivo blysem2.bat da interface que coleta e transfere
corretamente os dados pode ser visualizado a seguir:
------------------rem BLYSEM2.bat 22/10/2003
rem Os parametros a seguir sao da interface da pesquisa
rem ICI=2 (numero do ICI)
rem PointSource tipo K (da pesquisa)
rem IN=2 (respectivo location1 - parametro das tags tipo K no PI Server)
rem ID=1 (ICI primario, nao reduntante)
rem com output habilitada
rem f sao definicoes de scan classes
rem ec = io rate counter (utilizado se necessario)
rem to = ICI timeout
rem me = numero maximo de excecoes por iteracao
rem outros parametros setados como default.
blysem2.exe /host=S2811AU02:5450 /id=1 /ec=1 /ps=K /in=2 /ici=2 /me=1000
/to=180 /f=00:00:15,00:00:00 /f=00:00:30,00:00:00 /f=00:00:45,00:00:00 /of=1
/q /stopstat
-------------------
47
A interface foi testada ao executar-se o arquivo *.bat, verificando-se se os
dados estavam sendo transferidos corretamente para o arquivo de dados do PI no
servidor. Essa verificação foi feita utilizando-se o aplicativo para MS-DOS
apisnap.exe. Além disso realizou-se uma varredura por mensagens de erro no
arquivo pipc.log.
Quando foi verificado o correto funcionamento da interface, a mesma foi
configurada para rodar como um serviço do Windows, inicializando de maneira
automática junto com o computador.
Para instalar a interface como um serviço do Windows era necessário saber
se o serviço de buferização (Bufserv) seria utilizado ou não. O propósito do Bufserv
é continuar a coleta de dados da interface caso o servidor esteja desligado por
algum motivo. Sabe-se que o serviço de buferização foi instalado juntamente com o
PI-API quando o mesmo foi instalado.
A interface foi instalada como um serviço automático, executando-se a linha
de comando abaixo no prompt de comando:
> blysem2 -install -auto -depend "tcpip DD_<device name> bufserv"
> blysem – start
O parâmetro DD_<device name> faz referência ao nome do dispositivo
setado durante a configuração do aplicativo ICICONF.
Durante os testes para verificar se a interface estava funcionando
corretamente foi utilizado o utilitário bufutil.exe, para verificar se o serviço de
buferização, caso o servidor estivesse desligado por algum motivo, estava
funcionando corretamente, como pode ser observado nas Figuras 29 e 30.
48
Figura 29 – Buffer Primário de Memória sendo utilizado
Figura 30 – Buffer Secundário de Memória sendo utilizado
Além dos testes realizados sobre o sistema de buferização da interface, foram
realizados testes onde o objetivo era verificar se a interface estava repassando
corretamente os dados para o servidor PI. Tais testes foram realizados utilizando-se
os aplicativos PI-ProcessBook e apisnap.exe, que remetiam em tempo real os
valores atuais das variáveis que foram comparados com os valores obtidos pelo
software supervisório da ABB/Bailey, para verificar se os mesmos eram iguais.
49
4.2: Criação de Planilhas para Automação de Tarefas Repetitivas
Quando foi obtido o funcionamento correto da interface de coleta de dados do
sistema PI, a etapa seguinte foi a configuração dos tags no servidor e a utilização
dos dados coletados segundo a necessidade da Gerência de Pesquisa.
Para isso foram criadas diversas planilhas eletrônicas utilizando o aplicativo
Microsoft Excel para automação das tarefas repetitivas. Entre as planilhas mais
importantes criadas estão as citadas a seguir.
4.2.1: Cálculo de Atributos dos Tags a partir do BD do SDCD
A planilha eletrônica responsável pelo cálculo dos atributos dos tags a serem
enviados para o servidor PI, foi desenvolvida de maneira que utiliza dados
provenientes do banco de dados do SDCD da ABB/Bailey, para promover a correta
configuração dos atributos. Para isso faz-se necessário que as localizações dos
pontos no SDCD sejam definidas com precisão, para que não haja erro ao buscar o
valor das variáveis.
Figura 31 – Guia EngUnits
50
Dentro da planilha as guias "EngUnits" e "BayleyPointType" não devem ser
alteradas, pois apenas servem de referência para a guia "BD SDCD" executar os
cálculos. Todas as guias da planilha foram interligadas, dessa forma uma guia pode
depender das outras para efetuar os cálculos para os quais foi designada.
Figura 32 – Guia Bailey PointType
A guia "BD SDCD" deve ser editada com dados obtidos do banco de dados
do SDCD a ser obtido com o operador responsável. Os dados a serem inseridos
nessa guia são: TAGNAME, TAGDESC, TAGTYPE, PV/UNITS, PV/LOW, PV/HIGH,
LOOP, PCU, MODULE, BLOCK.
Além disso a guia “BD SDCD” é responsável por retirar das guias
anteriormente citadas, os valores para as colunas “Bailey Point Type”, “Unidades”, e
“Point Type”. Para isso foram utilizadas funções como “INDEX” e “MATCH”, para
correlacionar as tabelas e os valores armazenados nelas.
Assim, por exemplo, se uma variável possuía seu “TAGTYPE” igual a
“ANALOG”, então seu “Bailey Point Type” seria igual a 5. Da mesma forma as
“Unidades” de uma variável foram buscadas pelo valor do seu “Unit_ID”, e o “Point
Type” da variável foi determinado pelo “TAGTYPE” dela.
51
Figura 33 – Guia BD SDCD
Na guia "Cálculo para Exportar", os outros atributos (locations, zero, span,
typicalvalue, engunits, excdev, compdev, compmin, compmax, compressing,
pointtype) são calculados a partir dos dados previamente obtidos.
Figura 34 – Guia Cálculo para Exportar
52
Assim, a guia "Cálculo para Exportar" está pronta para ser exportada para o
servidor com os tags devidamente definidos e seus parâmetros devidamente
calculados.
Para exportar os dados calculados para o servidor, utiliza-se o utilitário PI-Tag
Configurator, um add-in para Microsoft Excel, fornecido pela OSIsoft.
4.2.2: Cálculo de Estados Digitais
Utilizando
o
mesmo
princípio
da
planilha
anteriormente
citada,
foi
desenvolvida uma planilha responsável pelo cálculo do estado digital das variáveis
coletadas pelo servidor PI.
Figura 35 – Estados Digitais Lógicos
Como pode observar-se na Figura 35, essa planilha utiliza-se de uma tabela
de estados digitais lógicos que são retornados pelo SDCD. Além disso, como pode
verificar-se na guia seguinte, a planilha também depende dos atributos LS0 à LS3
retirados do banco de dados do SDCD.
53
Figura 36 - Estados digitais de cada tag digital
O mecanismo de cálculo dos estados digitais está baseado na busca pela
correspondência na tabela de estados lógicos, do valor encontrado nas colunas LS0
a LS3, preenchendo assim as colunas ZERO, UM, DOIS e TRÊS.
Assim, os valores digitais 0 e 1 monitorados pelo sistema PI, podem ter
significados diferentes como: abre e fecha, início e fim, ligado e desligado, etc.
4.2.3: Cálculo de Valores Atuais das Variáveis
O monitoramento dos valores atuais das variáveis através de planilha
eletrônica é feito utilizando-se uma funcionalidade fornecida pelo add-in para
Microsoft Excel, PI-Data Link. Esse add-in disponibiliza inúmeras funções para
monitoramento e inserção de dados diretamente no servidor.
54
A função PICurrVal , como se verifica na Figura 37, retorna o valor atual das
variáveis solicitadas, a partir do conhecimento do tag, ou seja, o nome das mesmas.
Figura 37 – Retorno de Valor Atual das Variáveis
O desenvolvimento das planilhas eletrônicas que otimizaram diversas tarefas,
ocorreu de forma gradativa e concomitantemente à realização de outras atividades.
4.3: Criação de Telas de Processo
A criação de telas de processo deu-se devido a necessidade de
monitoramento do que estava acontecendo na área, sem que fosse necessário ir até
a mesma para acompanhar o processo, ou ainda, sem que fosse necessário acessar
o software supervisório da ABB/Bailey para obter informações em tempo real.
Todas as telas de processo criadas foram disponibilizadas num servidor na
intranet da SIX. Para que pudessem ser acessadas bastava mapear nos
computadores o endereço de rede onde essas telas estão armazenadas. Para
55
visualizá-las o usuário precisava possuir o aplicativo PI-ProcessBook instalado em
seu computador.
Figura 38 – Lista de telas do PI-ProcessBook
O processo de criação de telas do PI-ProcessBook para monitorar processos
em tempo real, envolvia os seguintes passos:
•
Inserção de um novo Display (Menu File > New > ProcessBook Display
(.pdi) File > OK), onde se pode definir o nome do Display a ser criado,
entrando com o mesmo na caixa de texto ProcessBook Name.
•
No novo Display pode-se montar o processo utilizando as bibliotecas do
PI-ProcessBook, fazendo-se desenhos, ou utilizando panos de fundo. No
caso das telas criadas foram utilizados panos de fundo retirados do
software supervisório da ABB/Bailey e editados, como se verifica na Figura
39.
56
Figura 39 – Comparação entre telas de processo
•
Para utilizar o pano de fundo, é preciso certificar-se de que a imagem a
ser utilizada como pano de fundo tenha sido salva como "256 Color
Bitmap", "16 Color Bitmap" ou "Monochrome Bitmap", isso porque se a
imagem for salva como "24-bit Bitmap" a mesma perderá resolução ao ser
inserida como pano de fundo no display do PI-ProcessBook.
•
Os campos onde são mostrados os valores atuais das variáveis de
processo a serem monitoradas em tempo real, são adicionados a partir do
Menu Draw > Value, quando uma janela abrir-se-á e poder-se-á definir o
servidor, o nome da variável a ser monitorada, o formato do número, etc.
•
A inserção de links de uma tela de monitoramento para outra, é realizada
a partir da inserção de um botão que aponte para o caminho correto. Para
inserir um botão utilize o Menu Draw > Button. Uma janela aparecerá onde
se pode definir o nome do botão, o tipo de comando a que ele estará
relacionado, no caso de criar um link para outra tela escolhe-se a opção
Linked Display. Em Action Item deve-se a definir qual tela aparecerá ao
57
clicar o botão, e por fim ainda pode-se escolher se esta ação abrirá uma
nova tela ou permanecerá na mesma.
Ao todo foram criadas 49 telas de processo e 12 telas de gráficos. Exemplos
são mostrados abaixo.
Figura 40 –Tela de Processo Geral criada no PI-ProcessBook
58
Figura 41 – Tela criada no PI-ProcessBook
Figura 42 – Gráfico do PI-ProcessBook
59
4.4: Desenvolvimento de Aplicativos em Visual Basic
O trabalho final que foi executado para a Gerência de Pesquisa da SIX, foi o
desenvolvimento de aplicativos em Visual Basic objetivando otimizar e automatizar o
monitoramento das variáveis do processo de Craqueamento Catalítico Fluido, e a
inserção de dados de laboratório no servidor PI.
A primeira etapa do desenvolvimento dos aplicativos, foi o estudo da
linguagem de programação Visual Basic. A escolha dessa linguagem de
programação deu-se pelo fato de que já existiam softwares de balanço de massa e
energia que utilizavam essa linguagem em operação na U144.
O objetivo inicial era desenvolver uma rotina em Visual Basic, a qual seria
inserida nos aplicativos UMProcess/DataLab e UMProcess/BME, para que os
mesmos enviassem automaticamente os valores de balanços por eles calculados
para serem armazenados no servidor PI juntamente com as outras variáveis
referentes ao processo de FCC coletadas pelo SDCD.
Foram desenvolvidos dois softwares, PI Tag Monitor e PI Data Insert. O
primeiro responsável pelo monitoramento amigável, em tempo real ou não, das
variáveis armazenadas no servidor. E o segundo, responsável pela inserção de
dados de laboratório no servidor.
4.4.1: PI Tag Monitor
O aplicativo PI Tag Monitor foi elaborado para efetuar o monitoramento dos
dados do servidor PI a partir da coleta em tempo real dos mesmo. A maior
dificuldade encontrada durante a elaboração do aplicativo foi a escolha de uma
função que melhor se adequasse ao monitoramento correto de todos os tipos de
variáveis. A única função do módulo piapi32.bas que coletava corretamente as
variáveis do tipo string era piar_getarcvaluex.
É possível realizar uma procura pelas variáveis desejadas e mostrar seus
valores corretos, independente dos seus pointtypes (float32, int32 ou string), de
acordo com o timestamp definido pelo usuário.
A seguir são apresentadas telas passo a passo do aplicativo em
funcionamento. A Figura 43 mostra a tela inicial do programa, onde se entra com o
60
nome do servidor na caixa de texto, e clica-se no botão Conectar, para que a
conexão com o servidor seja efetuada. No passo seguinte, Figura 44, deve-se clicar
no botão Procurar presente na tela de monitoração dos dados.
Figura 43 – PI Tag Monitor – Splash Screen
Figura 44 – PI Tag Monitor – Tela de Monitoração dos Dados
Uma nova tela que realiza a procura pelas variáveis desejadas é aberta. No
caso do exemplo abaixo o Tag Mask escolhido foi “TI-144*”, determinando assim
61
que o programa deve rastrear por todas as variáveis presentes no servidor PI que
iniciam com o prefixo inserido na caixa de texto. A procura só é realmente efetivada
após clicar-se no botão Procurar.
Figura 45 – PI Tag Monitor – Tela de Busca
Ainda na tela de busca é possível especificar se a procura deve ser realizada
somente para um tipo de PointSource, ou se a mesma deve procurar todos os tipos.
No caso dos tags da Gerência de Pesquisa da SIX, o PointSource é igual a “K”. Já
no caso das variáveis inseridas manualmente no servidor, o PointSource é igual a
“L”.
O resultado da procura realizada é evidenciado na própria tela de busca que é
atualizada após o término da ação de procurar pelas variáveis que possuíam o
TagMask igual a “TI-144*” e o PointSource igual a “K”.
62
Figura 46 – PI Tag Monitor – Resultado da Busca Efetuada
Outras buscas podem ser efetuadas, para que o usuário consiga numa
mesma tela monitorar todas as variáveis desejadas. O número máximo de variáveis
que podem ser monitoradas ao mesmo tempo pelo programa PI Tag Monitor é
dezesseis.
A Figura 47 mostra a tela final de monitoramento do aplicativo elaborado.
Nela estão sendo monitoradas variáveis atualizadas pelo SDCD (TI-144*) e variáveis
inseridas manualmente (U144*), sendo a variável “U144-AAFluidoSerpentina“, uma
variável do tipo string, evidenciando que a dificuldade apontada no início dessa
seção foi superada, e que a leitura dos tags do tipo string é realizada corretamente.
63
Figura 47 – PI Tag Monitor – Monitoramento de Variáveis
4.4.2: Entrada Manual de Dados
A inserção manual de informações no banco de dados do PI exige que os
tags a elas relacionadas possuam atributos configurados adequadamente.
O PointSource utilizado para variáveis que recebem entrada manual de dados
deve ser igual a “L” de Laboratory Tags, indicando que os valores inseridos não vêm
de uma interface, mas sim de uma entrada do usuário ou de uma aplicação
específica.
O parâmetro Compressing normalmente deve ser igual a zero, pois as
entradas de dados manuais não devem sofrer o teste de compressão de dados que
serve para remover valores que não tenham mudado significativamente.
64
Por outro lado, o parâmetro Step geralmente é setado em um, já que a
maioria dos dados manuais devem ser mostrados com interpolação do tipo ZOH,
Interpolador de Ordem Zero, pois é considerada má prática interpolar linearmente
entre valores inseridos manualmente, para tentar calcular que valor a variável teria
se a medida tivesse sido realizada num momento particular.
Os parâmetros Location# podem ser ignorados, porque não existe uma
interface envolvida na coleta dos dados. Da mesma forma os parâmetros ExcDev,
ExcMin, ExcMax, e ExcDevPercent também podem ser ignorados, pois o teste de
exceção normalmente é realizado pela interface, e no caso da inserção manual de
dados não existe interface envolvida.
Por último, o parâmetro DataAccess deve ser configurado para que seja igual
a "o:rw g:rw w:rw", assim as aplicações criadas para inserir dados manualmente no
servidor, terão acesso a ele e poderão escrever no banco de dados.
4.4.3: PI Data Insert
A elaboração do aplicativo PI Data Insert, utilizando a linguagem de
programação Visual Basic, visou o lançamento dos dados da operação diretamente
no servidor PI, com o objetivo de unificar a base de dados, alocando todos os
valores de processo, ou variáveis calculadas num mesmo servidor.
Assim como no desenvolvimento do PI Tag Monitor, a maior dificuldade
encontrada durante o desenvolvimento do PI Data Insert, foi a inserção incorreta dos
dados do tipo texto no servidor. Após inúmeras tentativas descobriu-se a função que
inseria corretamente strings no servidor, bem como os parâmetros que para ela
deveriam ser passados. Tal função era a pisn_putsnapshotx.
O aplicativo testa se o dado inserido está de acordo com o PointType
armazenado no servidor, assim se o número que está sendo inserido deve ser um
inteiro, e o usuário tentar inserir um número fracionário, o programa mostra uma
mensagem de erro ao usuário solicitando que um número inteiro seja inserido.
A seqüência de ações executadas pelo programa é a seguinte: o programa
testa se a caixa de texto associada a cada variável está vazia ou não, caso esteja
vazia, ele pula para próxima caixa de texto, caso contrário ele executa o teste que
verifica se o valor inserido é do tipo do valor determinado no servidor para aquela
65
variável. Se o valor estiver incorreto o programa pede para que o usuário digite na
caixa de texto um valor compatível com o tipo exigido pela variável. Caso o valor
inserido na caixa de texto passe no teste anterior, o programa verifica se foi
especificada a Data e Hora de inserção dos dados, se esse parâmetro não foi
especificado, o programa solicita que o usuário especifique-o, para que ele possa
dar continuidade ao processo de inserção do novo dado no servidor.
Figura 48 – PI Data Insert – Tela de Inserção dos Dados
Assim, se o valor passar por todos os testes citados anteriormente, ele é
inserido no servidor, com a Data e Hora especificadas pelo usuário. Após a inserção
ser efetuada, o programa ainda testa para verificar se o dado foi inserido
corretamente, e acende uma “luz verde”, para indicar que a ação foi efetuada com
sucesso, como ilustrado na Figura 49.
66
Figura 49 – PI Data Insert – Processo de Inserção dos Dados
67
Capítulo 5: Discussão
dos
Resultados,
Conclusões
e
Perspectivas
No período inicial do estágio na SIX, onde foi realizado o Projeto de Fim de
Curso, que resultou nessa monografia, procedeu-se um estudo sobre o sistema PI
que resultou num aprendizado progressivo sobre o que ele é e sua aplicabilidade no
sistema Petrobras, devido suas potencialidades.
De fato, concentrar todas as informações num banco de dados, torna fácil a
organização e o acesso a esses dados armazenados, sendo esse o maior objetivo
da implementação do sistema PI.
O servidor PI da UN-SIX, é um servidor que armazena tanto os dados da
produção, que processa o xisto, quanto os dados provindos das unidades de
pesquisa.
A interface responsável pela coleta dos dados das unidades da Gerência de
Pesquisa não estava realizando a tarefa para a qual foi atribuída, comportando-se
como uma máquina ociosa, de forma que dados importantes de testes realizados
pelas unidades não estavam sendo armazenados no servidor PI.
Com a instalação e configuração da interface os dados de operação e testes
das unidades, em especial da Unidade Multipropósito de Craqueamento Catalítico
Fluido, passaram a ser enviados e armazenados corretamente no servidor,
possibilitando assim que esses dados pudessem ser acessados de qualquer
máquina conectada à intranet da SIX, ou até mesmo da Petrobras.
Um problema a ser resolvido futuramente é o problema de travamento da
interface, que embora esteja coletando corretamente os dados, tem “congelado” em
dias de temperatura muito altas, o que leva à necessidade de reinicialização da
mesma. Vários componentes de hardware da máquina foram trocados, não
solucionando o problema.
Com
a
interface
funcionando
adequadamente
deu-se
início
ao
desenvolvimento de ferramentas que automatizassem o processo de criação e
68
edição de tags no servidor PI, e que fossem capazes de visualizar dados, além de
inseri-los corretamente no banco de dados do PI.
Assim, foram criadas planilhas eletrônicas utilizando-se o aplicativo Microsoft
Excel, responsáveis por: configurar corretamente os atributos dos tags, monitorar
variáveis em tempo real, e especificar o estado digital de cada variável digital
presente no servidor. Citando que durante o trabalho realizado, foram criados e
editados quase 1900 pontos no servidor PI. A não utilização das planilhas
desenvolvidas, tornaria uma tarefa extremamente trabalhosa, inserir os dados no
servidor, um por um, o que não compensaria.
As quase cinqüenta telas de processo criadas para acompanhamento do
funcionamento da Unidade de FCC utilizando-se o software PI-ProcessBook,
permitem que o usuário monitore o andamento dos testes realizados em qualquer
máquina conectada à intranet, em tempo real. O aspecto das telas do software
supervisório da ABB/Bailey foi mantido, para que os operadores da unidade,
tivessem facilidade ao acompanhar o andamento do processo por outro aplicativo,
no caso o PI-ProcessBook.
Os aplicativos PI Data Insert e PI Tag Monitor, foram elaborados para facilitar
a inserção dos dados da operação no servidor PI, como também para monitorar as
variáveis no período de tempo desejado. São aplicativos que customizam a maneira
como os dados são vistos e inseridos no servidor. A principal dificuldade encontrada
na elaboração desses dois aplicativos esteve relacionada aos dados do tipo texto,
que ou eram inseridos incorretamente no servidor, ou eram lidos incorretamente pelo
aplicativo de monitoramento das informações. A solução para esse problema com os
dados do tipo texto foi encontrada a partir do contato com o suporte da OSIsoft,
empresa desenvolvedora do sistema PI, que disponibiliza dos módulos piapi32.bas e
piutil.bas, para facilitar o desenvolvimento de aplicações em Visual Basic.
De
modo
geral,
o
desenvolvimento
dessas
atividades
transcorreu
gradualmente, à medida que o sistema foi sendo conhecido e desmistificado. O uso
da palavra “desmistificado” é cabível, uma vez que o sistema era previamente
conhecido
apenas
pelo
operador
responsável
processamento do xisto na SIX.
69
pelo
mesmo
no
setor
de
Com o aprendizado adquirido sobre o sistema, e com a transferência e
disseminação das informações absorvidas, o sistema passou de desconhecido, e
por que não abandonado, para uma ferramenta valiosa de coleta, armazenamento e
gerenciamento dos dados provenientes de testes nas unidades de Pesquisa da SIX.
Conclui-se que as funções de implementar, configurar e customizar o sistema
Plant Information, na Unidade Multipropósito de Craqueamento Catalítico Fluido,
inseridas no contexto do curso de Engenharia de Controle e Automação Industrial,
obtiveram sucesso, sabendo que o trabalho desenvolvido no período de agosto de
2003 a fevereiro de 2004 teve seu valor reconhecido pelas partes interessadas.
Como perspectivas futuras de tarefas a serem desenvolvidas listam-se:
•
Reinstalar e configurar o servidor PI e a interface em novas máquinas;
•
Criar interfaces amigáveis para inserção dos dados oriundos do laboratório
e da engenharia no servidor PI;
•
Adquirir e instalar o utilitário PI Active View para permitir acesso remoto via
browser às telas do PI-ProcessBook.
70
Bibliografia:
[ 1 ] PI Application Programming Interface – Version 1.3.3. San Leandro, CA: OSI
Software Inc., July 2000.
[ 2 ] PI Data Link User's Guide – Version 1.9. San Leandro, CA: OSI Software Inc.,
November 2000.
[ 3 ] PI-Process Book – Programmer's Reference Manual – Version 2.12. San
Leandro, CA: OSI Software Inc., December 1999
[ 4 ] BROWN, Steve. Visual Basic 6 Complete: Sybex, 1999. 1011 p.
[ 5 ] http://www.osisoft.com
71
72
ar
gases de
combustão
catalisador
silo de
carga
atm
Anexo A – Fluxograma Unidade Multipropósito de FCC
atm
vapor
"stripper"
ciclones
LRCV
regenerador
ar de
combustão
ciclones
atm
PDRCV
TRCV
carga
vapor
de "lift"
gases de
combustão
atm
HV
óleo
pesado
"riser"
condensadores
PRCVb
PRCVd
"flare"
óleo
produto
óleo
leve
FREON
torre de
absorção
condensador
condensador
Unidade Multipropósito de FCC U-144
Anexos:
Anexo B – Código Fonte do arquivo piapi32.bas
' $Archive: /PI/clients/piapi/piapi32.bas $
'Copyright (c) 1993-98 OSI Software, Inc. All rights reserved.
'Unpublished - rights reserved under the copyright law of the United States.
'
'USE OF A COPYRIGHT NOTICE IS PRECAUTIONARY ONLY AND DOES NOT IMPLY PUBLICATION
'OR DISCLOSURE.
'
'THIS SOFTWARE CONTAINS CONFIDENTIAL INFORMATION AND TRADE SECRETS OF
'OSI SOFTWARE, INC. USE, DISCLOSURE, OR REPRODUCTION IS PROHIBITED WITHOUT
'THE PRIOR EXPRESS WRITTEN PERMISSION OF OSI SOFTWARE, INC.
'
'RESTRICTED RIGHTS LEGEND
'Use, duplication, or disclosure by the Government is subject to restrictions
'as set forth in subparagraph (c)(1)(ii) of the Rights in Technical Data and
'Computer Software clause at DFARS 252.227.7013
'
'OSI Software, Inc.
'777 Davis Street, Suite 250, San Leandro CA 94577
'
' $Log: /PI/clients/piapi/piapi32.bas $
'
' 17
2/26/03 9:31a Matzen
' Added function prototype for get_utctime
'
' 16
2/19/03 2:48p Matzen
' The prototype for piut_getloginuser was changed to return a long
' instead of a string. Although visual basic strings can be returned as
' parameters in function calls (as long as they are declared as Byval
' String), visual basic strings cannot directly be returned by a function
' writen in C or C++ unless the C or C++ function returns a BSTR.
Once
' must treat function returns of char* as long in visual basic and then
' manipulate the long using win32 calls. See clientele call 52201GMBH.
'
' 15
4/16/02 11:34a Harry
' Changed case of PITime in method definitions. Screws up VB projects
' that include it and want to use PISDK PITime.
Rem
Rem 14
8/10/99 2:27p Cahenze
Rem Added piut_getloginuser
Rem
Rem 13
7/27/99 5:29p Cahenze
Rem drVals were #, not Any.
Rem
Rem 12
5/13/99 11:19a Cahenze
Rem Added piut_strerror
Rem
Rem 11
4/28/99 8:08a Charlie
Rem Added archive retrieval flags which were missing. Added missing $ type
Rem in pilg_addnewserver. Removed Byval declaration in piut_errormsg for
Rem msglen.
Rem
Rem 10
2/15/99 5:45p Charlie
Rem pisn_evmexceptx: first argument changed to byref.
Rem
Rem 9
2/08/99 1:09p Charlie
Rem Added pilg_checklog, pilg_formputlog, pisn_evmexceptx,
Rem pisn_sendexcepstrucq, piut_fastserverversion.
Rem
Rem 8
12/03/98 5:07p Charlie
Rem Removed unusable PIvaluetypes. Modified PITIMESTAMP.reserved to
Rem PITIMESTAMP.tzinfo. Added piar_putarcvaluesx and mode definitions,
Rem pitm_isdst, pitm_setdst and piut_getserverversion.
Rem
Rem 7
5/15/98 11:35a Harry
Rem Removed line
Rem Attribute VB_Name = "Module1"
Rem Conflicted with other modules when loading into VB projects and not
Rem required. Leaving it out causes the module to take the next available
Rem name.
Rem
Rem 6
4/30/98 10:19a Charlie
Rem
Rem 4
10/29/97 7:45a Harry
Rem Added defined constants for extended API, GETSAME, PI_NOMOREVALUES, and
Rem BITFLAGS
'
' History
73
' 11/22/96 hs Added and fixed extended api declarations and types
Option Explicit
'------------------------------- piar_summary definitions
Global Const ARCTOTAL = 0
Global Const ARCMINIMUM = 1
Global Const ARCMAXIMUM = 2
Global Const ARCSTDEV = 3
Global Const ARCRANGE = 4
Global Const ARCAVERAGE = 5
Global Const ARCMEAN = 6
'------------------------------- piar_value definitions
Global Const ARCVALUEBEFORE = 1
Global Const ARCVALUEAFTER = 2
Global Const ARCVALUEINTERP = 3
Global Const ARCVALUECODE = 4
'------------------------------- piel_evntactn definitions
Global Const ELEQSEARCH = 1
Global Const ELGESEARCH = 2
Global Const ELLESEARCH = 3
Global Const ELGTSEARCH = 4
Global Const ELLTSEARCH = 5
Global Const ELEDIT = 6
Global Const ELDELETE = 7
'------------------------------- pilg_putoutput definitions
Global Const MSGLOG = 1
Global Const STDOUTPUT = 2
'------------------------------- pipt_updates definitions
Global Const NOTAGS = 0
Global Const POINTCREATE = 1
Global Const POINTEDIT = 2
Global Const POINTDELETE = 3
'------------------------------- piut_login definitions
Global Const PILOGINOK = 1
Global Const PIREADACCESS = 2
Global Const PIWRITEACCESS = 4
Global Const PILOGINREAD = 8
Global Const PILOGINWRITE = 16
Global Const PILOGINPIUSER = 256
Global Const PILOGINVMS = 512
Global Const PILOGINUNIX = 1024
Global Const PINO = 0
Global Const PIREAD = 1
Global Const PIREADWRITE = 2
'-------------------------------- pilg definitions
Global Const GETFIRST = 0
Global Const GETNEXT = 1
Global Const GETSAME = 2
Global Const PI_NOMOREVALUES = 100
Global Const PI_M_AFLAG = 1
Global Const PI_M_QFLAG = 2
Global Const PI_M_SFLAG = 4
Global Const MAX_POINT_NUM_LEN = 16
Global Const MAX_NODENAME_LEN = 30
Global Const MAX_TAGNAME_LEN = 256
Global Const MAX_USERNAME_LEN = 30
Global Const PILOGIN_SERVER_TYPE_PI = 1000
'-------------------------------- extended API definitions
Global Const ARCflag_time = 4
Global Const ARCFLAG_EVEN = 8
Global Const ARCflag_filter = 16
Global Const ARCflag_mark = 32
Global Const ARCFLAG_COMP = 64
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Global
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
Const
PI_Type_null = 0
PI_Type_bool = 1
PI_Type_uint8 = 2
PI_Type_int8 = 3
PI_Type_char = 4
PI_Type_uint16 = 5
PI_Type_int16 = 6
PI_Type_uint32 = 7
PI_Type_int32 = 8
PI_Type_uint64 = 9
PI_Type_int64 = 10
PI_Type_float16 = 11
74
Global
Global
Global
Global
Global
Global
Global
Const
Const
Const
Const
Const
Const
Const
PI_Type_float32 = 12
PI_Type_float64 = 13
PI_Type_PI2 = 14
PI_Type_digital = 101
PI_Type_blob = 102
PI_Type_PIstring = 105
PI_Type_bad = 255
' piar_putarcvaluesx defines
Global Const ARCNOREPLACE = 3
Global Const ARCAPPEND = 4
Global Const ARCREPLACE = 5
Global Const ARCREPLACEX = 6
Global Const ARCDELETE = 7
Global Const ARCAPPENDX = 8
' add unless event(s) exist at same time (PI 2.x)
' add event regardless of existing events
' add event, replace if event at same time
' replace existing event (fail if no event at time)
' remove existing event
' add event regardless of existing events, no compression
'---------------------------- Structure declarations
Type QERROR
Point As Long
piapierror As Long
End Type
Global Const MAXPI3PUTSNAP = 255 'For queue call return values.
Type QERRORS
syserror As Long
numpterrs As Long
qerr(MAXPI3PUTSNAP) As QERROR
End Type
Type PI_EXCEPT
NewVal As Single
newstat As Long
newTime As Long
oldVal As Single
oldstat As Long
oldTime As Long
prevVal As Single
prevstat As Long
prevTime As Long
ExcDevEng As Single
ExcMin As Long
ExcMax As Long
End Type
Type PI_VAL
bSize As Long
istat As Long
FLAGS As Integer
End Type
Type TagList
server As String * MAX_NODENAME_LEN
NodeID As Long
tagname As String * MAX_TAGNAME_LEN
Point As Long
reserved As Long
End Type
Type PITimeStamp
Month As Long '
/* 1-12 */
Year As Long
' /* four digit */
Day As Long
'
/* 1-31 */
Hour As Long
' /* 0-23 */
Minute As Long ' /* 0-59 */
tzinfo As Long
Second As Double ' /* 0-59.99999999.... */
End Type
'PI batch function declarations -- New with PI-API v1.1.0
Declare Function piba_getunit Lib "piapi32.dll" (ByVal unit$, ByVal slen&, ByVal index&,
number&) As Long
Declare Function piba_getaliaswunit Lib "piapi32.dll" (ByVal unit$, ByVal balias$, ByVal
slen&, ByVal index&, number&) As Long
Declare Function piba_getunitswalias Lib "piapi32.dll" (ByVal balias$, ByVal unit$, ByVal
slen&, ByVal index&, number&) As Long
Declare Function piba_findaliaspoint Lib "piapi32.dll" (ByVal unit$, ByVal balias$, ptno&,
ByVal tagname$, ByVal slen&) As Long
Declare Function piba_search Lib "piapi32.dll" (ByVal batchid$, ByVal blen&, ByVal unit$,
ByVal ulen&, ByVal product$, ByVal plen&, stime&, etime&, ByVal sf&, ByVal timeout&) As Long
'PI Login Services function declarations -- new with PI-API v1.1.0
75
Declare Function pilg_addnewserver Lib "pilog32.dll" (ByVal servername$, ByVal servertype&,
ByVal username$, ByVal portnum&) As Long
Declare Function pilg_connectdlg Lib "pilog32.dll" (ByVal hwndparent&) As Long
Declare Function pilg_disconnect Lib "pilog32.dll" () As Long
Declare Function pilg_disconnectnode Lib "pilog32.dll" (ByVal servername$) As Long
Declare Function pilg_getconnectedserver Lib "pilog32.dll" (ByVal servernamebuf$, bufsize&,
NodeID&, port&, ByVal seq&) As Long
Declare Function pilg_getdefserverinfo Lib "pilog32.dll" (ByVal servernamebuf$, bufsize&,
NodeID&, port&) As Long
Declare Function pilg_getnodeid Lib "pilog32.dll" (ByVal servernamebuf$, NodeID&) As Long
Declare Function pilg_getselectedtag Lib "pilog32.dll" (taglst As TagList, ByVal seq&) As Long
Declare Function pilg_getservername Lib "pilog32.dll" (ByVal NodeID&, ByVal servernamebuf$,
bufsize&) As Long
Declare Function pilg_login Lib "pilog32.dll" (ByVal hwndparent&, ByVal username$, ByVal
servername$, ByVal password$, valid&) As Long
Declare Function pilg_pointattdlg Lib "pilog32.dll" (ByVal hwndparent&, taglst As TagList) As
Long
Declare Function pilg_registerapp Lib "pilog32.dll" (ByVal dllname$) As Long
' The function below requires allocating a linked list which is not supported in VB '
'Declare Function pilg_registerhelp Lib "pilog32.dll" (ByVal helpfile$, linklist&) As Long
Declare Function pilg_setservernode Lib "pilog32.dll" (ByVal servername$) As Long
Declare Function pilg_tagsearchdlg Lib "pilog32.dll" (ByVal hwndparent&) As Long
Declare Function pilg_unregisterapp Lib "pilog32.dll" () As Long
'Function declarations
Declare Function piar_calculation Lib "piapi32.dll" (count&, times&, rvals!, istats&, ByVal
Expr$) As Long
Declare Function piar_compvalues Lib "piapi32.dll" (ByVal pt&, count&, times&, rvals!,
istats&, ByVal rev&) As Long
Declare Function piar_compvaluesfil Lib "piapi32.dll" (ByVal pt&, count&, times&, rvals!,
istats&, ByVal Expr$, ByVal rev&, ByVal fil&) As Long
Declare Function piar_deletevalue Lib "piapi32.dll" (ByVal pt&, ByVal timedate&) As Long
Declare Function piar_interpvalues Lib "piapi32.dll" (ByVal pt&, count&, times&, rvals!,
istats&) As Long
Declare Function piar_interpvaluesfil Lib "piapi32.dll" (ByVal pt&, count&, times&, rvals!,
istats&, ByVal Expr$) As Long
Declare Function piar_panvalues Lib "piapi32.dll" (ByVal pt&, count&, timedate&) As Long
Declare Function piar_plotvalues Lib "piapi32.dll" (ByVal pt&, ByVal intervals&, count&,
times&, rvals!, istats&) As Long
Declare Function piar_putvalue Lib "piapi32.dll" (ByVal pt&, ByVal rval!, ByVal istat&, ByVal
timedate&, ByVal wait&) As Long
Declare Function piar_replacevalue Lib "piapi32.dll" (ByVal pt&, ByVal timedate&, ByVal rval!,
ByVal istat&) As Long
Declare Function piar_summary Lib "piapi32.dll" (ByVal pt&, time1&, time2&, rval!, pctgood!,
ByVal code&) As Long
Declare Function piar_timedvalues Lib "piapi32.dll" (ByVal pt&, count&, times&, rvals!,
istats&, ByVal prev&) As Long
Declare Function piar_timedvaluesfil Lib "piapi32.dll" (ByVal pt&, count&, times&, rvals!,
istats&, ByVal Expr$) As Long
Declare Function piar_timefilter Lib "piapi32.dll" (ByVal StartTime&, ByVal EndTime&, ByVal
Expr$, tottime&, passtime&) As Long
Declare Function piar_value Lib "piapi32.dll" (ByVal pt&, timedate&, ByVal Mode&, rval!,
istat&) As Long
Declare Function piel_addevnt Lib "piapi32.dll" (pitime&, number&, ByVal group&, ByVal etype&,
ByVal Msg$, ByVal timeout&) As Long
Declare Function piel_evntactn Lib "piapi32.dll" (pitime&, number&, group&, etype&, ByVal
slen&, ByVal Msg$, ByVal action&, ByVal timeout&) As Long
Declare Function pilg_checklogfile Lib "piapi32.dll" (ByVal action&, ByVal LogFile$) As Long
Declare Function pilg_formputlog Lib "piapi32.dll" (ByVal Msg$, ByVal IdString$) As Long
Declare Function pilg_puthomelog Lib "piapi32.dll" (ByVal Msg$) As Long
Declare Function pilg_putlog Lib "piapi32.dll" (ByVal Msg$) As Long
Declare Function pilg_putoutput Lib "piapi32.dll" (ByVal Msg$, ByVal FLAGS&) As Long
Declare Function pipt_compspecs Lib "piapi32.dll" (ByVal pt&, compdev&, compmin&, compmax&) As
Long
Declare Function pipt_compspecseng Lib "piapi32.dll" (ByVal pt&, compdeveng!, compmin&,
compmax&) As Long
Declare Function pipt_dates Lib "piapi32.dll" (ByVal pt&, creationdate&, ByVal creator$, ByVal
crlen&, changedate&, ByVal changer$, ByVal chlen&) As Long
Declare Function pipt_descriptor Lib "piapi32.dll" (ByVal pt&, ByVal desc$, ByVal slen&) As
Long
Declare Function pipt_digcode Lib "piapi32.dll" (digcode&, ByVal digstring$) As Long
Declare Function pipt_digcodefortag Lib "piapi32.dll" (ByVal pt&, digcode&, ByVal digstring$)
As Long
Declare Function pipt_digpointers Lib "piapi32.dll" (ByVal pt&, digcode&, dignumb&) As Long
Declare Function pipt_digstate Lib "piapi32.dll" (ByVal digcode&, ByVal digstate$, ByVal
slen&) As Long
Declare Function pipt_displaydigits Lib "piapi32.dll" (ByVal pt&, displaydigits&) As Long
Declare Function pipt_engunitstring Lib "piapi32.dll" (ByVal pt&, ByVal engunitstring$, ByVal
slen&) As Long
76
Declare Function pipt_engunstring Lib "piapi32.dll" (ByVal engunitcode&, ByVal engunitstring$,
ByVal slen&) As Long
Declare Function pipt_excspecseng Lib "piapi32.dll" (ByVal pt&, ExcDevEng!, ExcMin&, ExcMax&)
As Long
Declare Function pipt_exdesc Lib "piapi32.dll" (ByVal pt&, ByVal exdesc$, ByVal slen&) As Long
Declare Function pipt_findpoint Lib "piapi32.dll" (ByVal tagname$, pt&) As Long
Declare Function pipt_inprocbits Lib "piapi32.dll" (ByVal pt&, larchiving&, lcompressing&,
filtercode&) As Long
Declare Function pipt_instrumenttag Lib "piapi32.dll" (ByVal pt&, ByVal instrumenttag$, ByVal
slen&) As Long
Declare Function pipt_location Lib "piapi32.dll" (ByVal pt&, location&) As Long
Declare Function pipt_nextptwsource Lib "piapi32.dll" (ByVal source%, pt&) As Long
Declare Function pipt_pointid Lib "piapi32.dll" (ByVal pt&, ipt&) As Long
Declare Function pipt_pointsource Lib "piapi32.dll" (ByVal pt&, ByVal source$) As Long
Declare Function pipt_pointtype Lib "piapi32.dll" (ByVal pt&, ByVal pttype$) As Long
Declare Function pipt_ptexist Lib "piapi32.dll" (ByVal pt&) As Long
Declare Function pipt_recordtype Lib "piapi32.dll" (ByVal pt&, steps&) As Long
Declare Function pipt_rescode Lib "piapi32.dll" (ByVal pt&, rescode&) As Long
Declare Function pipt_scale Lib "piapi32.dll" (ByVal pt&, zero!, span!) As Long
Declare Function pipt_scan Lib "piapi32.dll" (ByVal pt&, lscan&) As Long
Declare Function pipt_signupforupdates Lib "piapi32.dll" () As Long
Declare Function pipt_sourcept Lib "piapi32.dll" (ByVal pt&, sourcept&) As Long
Declare Function pipt_squareroot Lib "piapi32.dll" (ByVal pt&, squareroot&) As Long
Declare Function pipt_tag Lib "piapi32.dll" (ByVal pt&, ByVal tag$, ByVal slen&) As Long
Declare Function pipt_taglong Lib "piapi32.dll" (ByVal pt&, ByVal tag$, ByVal slen&) As Long
Declare Function pipt_tagpreferred Lib "piapi32.dll" (ByVal pt&, ByVal tag$, ByVal slen&) As
Long
Declare Function pipt_totalspecs Lib "piapi32.dll" (ByVal pt&, totalcode&, convers!) As Long
Declare Function pipt_typicalvalue Lib "piapi32.dll" (ByVal pt&, typicalvalue!) As Long
Declare Function pipt_updates Lib "piapi32.dll" (pt&, ByVal tagname$, ByVal slen&, Mode&) As
Long
Declare Function pipt_userattribs Lib "piapi32.dll" (ByVal pt&, userint1&, userint2&,
userreal1!, userreal2!) As Long
Declare Function pipt_wildcardsearch Lib "piapi32.dll" (ByVal tagmask$, ByVal direction&,
found&, ByVal tagname$, ByVal slen&, pt&, numfound&) As Long
Declare Function pisn_evmdisestablish Lib "piapi32.dll" (count&, pts&) As Long
Declare Function pisn_evmestablish Lib "piapi32.dll" (count&, pts&) As Long
Declare Function pisn_evmexceptions Lib "piapi32.dll" (count&, pt&, rval!, istat&, timedate&)
As Long
Declare Function pisn_getsnapshot Lib "piapi32.dll" (ByVal pt&, rval!, istat&, timedate&) As
Long
Declare Function pisn_getsnapshots Lib "piapi32.dll" (pt&, rval!, istat&, timedate&,
piapierror&, ByVal count&) As Long
Declare Function pisn_putsnapshot Lib "piapi32.dll" (ByVal pt&, ByVal rval!, ByVal istat&,
ByVal timedate&) As Long
Declare Function pisn_putsnapshots Lib "piapi32.dll" (pt&, rval!, istat&, timedate&,
piapierror&, ByVal count&) As Long
Declare Function pisn_sendexcepstruc Lib "piapi32.dll" (ByVal pt&, ByVal pttype%, except As
PI_EXCEPT, count&) As Long
Declare Function pisn_sendexceptions Lib "piapi32.dll" (ByVal pt&, ByVal pttype%, oldVal!,
oldstat%, oldTime&, prevVal!, prevstat%, prevTime&, ByVal NewVal!, ByVal newstat%, ByVal
newTime&, ByVal ExcDevEng!, ByVal ExcMin%, ByVal ExcMax%, count&) As Long
Declare Function pisn_sendexcepstrucq Lib "piapi32.dll" (ByVal pt&, ByVal pttype%, except As
PI_EXCEPT, count&, ByVal Queueing%, numbptErrs&, qErrs As QERROR) As Long
'----- these functions have return types incompatible with Visual Basic
'Declare Function pisn_sendexceptionq Lib "piapi32.dll" (ByVal pt&, ByVal pttype%, oldval!,
oldstat%, oldtime&, prevval!, prevstat%, prevtime&, ByVal newval!, ByVal newstat%, ByVal
newtime&, ByVal excdeveng!, ByVal excmin%, ByVal excmax%, count&) As QERRORS
'Declare Function pisn_putsnapshotq Lib "piapi32.dll" (ByVal pt&, ByVal rval!, ByVal istat&,
ByVal timedate&) As QERRORS
'Declare Function pisn_flushputsnapq Lib "piapi32.dll" () As QERRORS
Declare Function pitm_delay Lib "piapi32.dll" (ByVal mseconds&) As Long
Declare Function pitm_fastservertime Lib "piapi32.dll" () As Long
Declare Sub pitm_formtime Lib "piapi32.dll" (ByVal timedate&, ByVal timestring$, ByVal slen&)
Declare Sub pitm_intsec Lib "piapi32.dll" (timedate&, timearray&)
Declare Function pitm_parsetime Lib "piapi32.dll" (ByVal timestr$, ByVal reltime&, timedate&)
As Long
Declare Sub pitm_secint Lib "piapi32.dll" (ByVal timedate&, timearray&)
Declare Function pitm_servertime Lib "piapi32.dll" (servertime&) As Long
Declare Function pitm_syncwithservertime Lib "piapi32.dll" () As Long
Declare Function pitm_systime Lib "piapi32.dll" () As Long
Declare Function piut_connect Lib "piapi32.dll" (ByVal ProcName$) As Long
Declare Function piut_disconnect Lib "piapi32.dll" () As Long
Declare Function piut_disconnectnode Lib "piapi32.dll" (ByVal SrvName$) As Long
Declare Function piut_fastserverversion Lib "piapi32.dll" (MinorVer&, ByVal buildid$, ByVal
BuildLen&) As Long
Declare Function piut_getapiversion Lib "piapi32.dll" (ByVal version$, ByVal slen&) As Long
Declare Function piut_getloginuser Lib "piapi32.dll" () As Long
Declare Sub piut_getprotocolvers Lib "piapi32.dll" (ByVal Vers$, ByVal slen&)
Declare Function piut_getserverversion Lib "piapi32.dll" (NodeID&, ByVal servername$, ByVal
servernamelen&, ByVal version$, ByVal versionlen&, ByVal buildid$, ByVal buildidlen&) As Long
77
Declare Sub piut_inceventcounter Lib "piapi32.dll" (ByVal counter&, ByVal count&)
Declare Function piut_ishome Lib "piapi32.dll" () As Long
Declare Function piut_login Lib "piapi32.dll" (ByVal username$, ByVal password$, valid&) As
Long
Declare Function piut_netinfo Lib "piapi32.dll" (ByVal namestr$, ByVal NameLen&, ByVal
addressstr$, ByVal addresslen&, ByVal typestr$, ByVal typelen&) As Long
Declare Function piut_netnodeinfo Lib "piapi32.dll" (ByVal namestr$, ByVal NameLen&, ByVal
addressstr$, ByVal addresslen&, connected&) As Long
Declare Function piut_netserverinfo Lib "piapi32.dll" (ByVal namestr$, ByVal NameLen&, ByVal
addressstr$, ByVal addresslen&, connected&) As Long
Declare Function piut_setdefaultservernode Lib "piapi32.dll" (ByVal servername$) As Long
Declare Sub piut_setprocname Lib "piapi32.dll" (ByVal ProcName$)
Declare Function piut_setservernode Lib "piapi32.dll" (ByVal servername$) As Long
Declare Sub piut_zeroeventcounter Lib "piapi32.dll" (ByVal counter&)
Declare Function piar_getarcvaluesx Lib "piapi32.dll" (ByVal PtNum&, ByVal arcMode&, count&,
drVal As Any, iVal&, bVal As Any, bSize&, istat&, FLAGS%, time0 As PITimeStamp, time1 As
PITimeStamp, ByVal FuncCode&) As Long
Declare Function piar_getarcvaluesfilterx Lib "piapi32.dll" (ByVal PtNum&, ByVal Mode&,
count&, drVal As Any, iVal&, bVal As Any, bSize&, istat&, FLAGS%, time0 As PITimeStamp, time1
As PITimeStamp, ByVal Expr$, ByVal FuncCode&) As Long
Declare Function piar_getarcvaluex Lib "piapi32.dll" (ByVal PtNum&, ByVal arcMode&, drVal As
Any, iVal&, bVal As Any, bSize&, istat&, FLAGS%, time0 As PITimeStamp) As Long
Declare Function piar_putarcvaluesx Lib "piapi32.dll" (ByVal count&, ByVal Mode&, PtNum&,
drVal As Any, iVal&, bVal As Any, bSize&, istat&, FLAGS%, time0 As PITimeStamp, Errors&) As
Long
Declare Function piar_putarcvaluex Lib "piapi32.dll" (ByVal PtNum&, ByVal Mode&, drVal As Any,
iVal&, bVal As Any, bSize&, istat&, FLAGS%, time0 As PITimeStamp) As Long
Declare Function pipt_pointtypex Lib "piapi32.dll" (ByVal PtNum&, typeX&) As Long
'Declare Function pisn_evmexceptionsx Lib "piapi32.dll" (ByVal Count&, PTnum&, event As
PI_EVENT, ByVal FuncCode&) As Long
Declare Function pisn_evmexceptx Lib "piapi32.dll" (count&, PtNum&, typeX&, Val As Variant,
istat&, FLAGS%, Timeval As PITimeStamp, ByVal FuncCode&) As Long
Declare Function pisn_flushputsnapqx Lib "piapi32.dll" (numbptErrs&, qErrs As QERROR) As Long
Declare Function pisn_getsnapshotsx Lib "piapi32.dll" (PtNum&, cntptnum&, drVal As Any, iVal&,
bVal As Any, bSize&, istat&, FLAGS%, time0 As PITimeStamp, lerror&, ByVal FuncCode&) As Long
Declare Function pisn_getsnapshotx Lib "piapi32.dll" (ByVal PtNum&, drVal As Any, iVal&, bVal
As Any, bSize&, istat&, FLAGS%, time0 As PITimeStamp) As Long
Declare Function pisn_putsnapshotqx Lib "piapi32.dll" (ByVal PtNum&, drVal As Any, iVal&, bVal
As Any, bSize As Long, istat As Long, FLAGS%, TimeStamp As PITimeStamp, ByVal Queueing&,
numbptErrs&, qErrs As QERROR) As Long
'pisn_putsnapshotsx takes a pointer to an array of string pointers which can't be generated in
VB
Declare Function pisn_putsnapshotsx Lib "piapi32.dll" (ByVal count&, PtNum&, drVal As Any,
iVal&, bVal As Any, bSize&, istat&, FLAGS%, time0 As Any, Errors&) As Long
Declare Function pisn_putsnapshotx Lib "piapi32.dll" (ByVal PtNum&, drVal As Any, iVal&, bVal
As Any, bSize&, istat&, FLAGS%, time0 As Any) As Long
'Declare Function pisn_sendexceptionqx Lib "piapi32.dll" (ByVal pt&, ByVal typeX&, oldValue As
PI_EVENT, prevvalue As PI_EVENT, newvalue As PI_EVENT, ByVal ExcDevEng#, ByVal ExcMin#, ByVal
ExcMax#, Count&, ByVal Queueing&, numbptErrs&, qErrs As QERROR) As Long
'Declare Function pisn_sendexceptionsx Lib "piapi32.dll" (ByVal num_pts&, ptnum&, typeX&,
except As PI_EXCEPTSTRU, Errors&, Count&) As Long
Declare Function pisn_sendexceptqx Lib "piapi32.dll" (ByVal pt&, ByVal typeX&, oldVal As
Variant, oldistat&, oldFlags%, oldTime As PITimeStamp, prevVal As Variant, previstat&,
prevFlags%, prevTime As PITimeStamp, Val As Variant, istat&, FLAGS%, newTime As PITimeStamp,
ByVal ExcDevEng#, ByVal ExcMin#, ByVal ExcMax#, count&, ByVal Queueing&, numbptErrs&, qErrs As
QERROR) As Long
Declare Function pitm_getpitime Lib "piapi32.dll" (time0 As PITimeStamp, frac#) As Long
Declare Function pitm_getutctime Lib "piapi32.dll" (time0 As PITimeStamp) As Double
Declare Function pitm_isdst Lib "piapi32.dll" (time0 As PITimeStamp) As Long
Declare Sub pitm_setcurtime Lib "piapi32.dll" (time0 As PITimeStamp, ByVal incl_subsec%)
Declare Sub pitm_setdst Lib "piapi32.dll" (time0 As PITimeStamp, ByVal tm_isdst&)
Declare Function pitm_setpitime Lib "piapi32.dll" (time0 As PITimeStamp, ByVal pitime&, ByVal
frac#) As Long
Declare Function pitm_settime Lib "piapi32.dll" (time0 As PITimeStamp, ByVal xyear&, ByVal
xmonth&, ByVal xday&, ByVal xhour&, ByVal xminute&, ByVal xsecond#) As Long
Declare Function piut_errormsg Lib "piapi32.dll" (ByVal stat&, ByVal Msg$, MsgLen&) As Long
Declare Function piut_setpassword Lib "piapi32.dll" (ByVal username$, ByVal oldpw$, ByVal
newpw$) As Long
Declare Function piut_strerror Lib "piapi32.dll" (ByVal stat&, ByVal Msg$, MsgLen&, ByVal
SrcStr$) As Long
78
Anexo C – Código Fonte do arquivo piutil.bas
' @(#)piutil.bas
1.1 09/20/95
'
'Copyright (c) 1995 Oil Systems, Inc. All rights reserved. Unpublished - rights
'reserved under the copyright law of the United States.
'
'USE OF A COPYRIGHT NOTICE IS PRECAUTIONARY ONLY AND DOES NOT IMPLY PUBLICATION
'OR DISCLOSURE.
'
'THIS SOFTWARE CONTAINS CONFIDENTIAL INFORMATION AND TRADE SECRETS OF
'OIL SYSTEMS, INC. USE, DISCLOSURE, OR REPRODUCTION IS PROHIBITED WITHOUT
'THE PRIOR EXPRESS WRITTEN PERMISSION OF OIL SYSTEMS, INC.
'
'RESTRICTED RIGHTS LEGEND
'Use, duplication, or disclosure by the Government is subject to restrictions
'as set forth in subparagraph (c)(1)(ii) of the Rights in Technical Data and
'Computer Software clause at DFARS 252.227.7013
'
'Oil Systems, Inc.
'545 Estudillo Ave., San Leandro CA 94577
'
'
Option Explicit
Type PIVAL
rval As Single
istat As Long
timedate As Long
End Type
'----- declarations used to make a window "always on top" ----'courtesy of Microsoft
Declare Function SetWindowPos Lib "user32" (ByVal h&, ByVal hb%, ByVal x%, ByVal y%, ByVal
cx%, ByVal cy%, ByVal f%) As Integer
Global Const SWP_NOMOVE = 2
Global Const SWP_NOSIZE = 1
Global Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE
Global Const HWND_TOPMOST = -1
Global Const HWND_NOTOPMOST = -2
'------------------------------------- handle errors in PI
Function ChkPIstatus(piname As String, apistatus As Long) As Long
If apistatus <> 0 Then
MsgBox "Error in " & piname & ": status = " & apistatus
End If
ChkPIstatus = apistatus
End Function
'------------------------------------- connect to PI server if server has changed
Sub Connect(servername As String)
Dim status As Long
status = ChkPIstatus("piut_setservernode", piut_setservernode(servername))
End Sub
Function FormatTime(pitime As Long) As String
Dim timestring As String * 19
pitm_formtime pitime, timestring, Len(timestring)
FormatTime = timestring
End Function
'----- Get digital state code, given a string
Function getDigCode(theString As String) As Long
Dim theCode As Long
If pipt_digcode(theCode, theString) = -12 Then
getDigCode = 0
' return 0 if string not found
Else
getDigCode = -theCode
'return a negative value, it's more useful
End If
End Function
'------------------------------------- get state string from code
Function getDigState(code As Long) As String
Dim state As String * 12
If ChkPIstatus("pipt_digstate", pipt_digstate(code, state, 12)) <> 0 Then
state = ""
'return empty string on error
End If
getDigState = state
End Function
79
'------------------------------------- get a snapshot event
Sub getEVMexception(ptno As Long, valu As PIVAL)
Dim count As Long
count = 1
If ChkPIstatus("pisn_evmexceptions", pisn_evmexceptions(count, ptno, valu.rval, valu.istat,
valu.timedate)) <> 0 Or count = 0 Then
ptno = 0
'return ptno = 0 if there is no exception at this time
End If
End Sub
'----- get point number from point name
Function getptno(itsName As String) As Long
Dim ptno As Long
Dim apistatus As Long
Dim tagname As String * 80 'must be fixed-length string because API can modify it
getptno = 0
'return zero on error
tagname = itsName
apistatus = pipt_findpoint(tagname, ptno)
If apistatus = -5 Then
MsgBox "Point """ & itsName & """ not found."
ElseIf ChkPIstatus("pipt_findpoint", apistatus) = 0 Then
getptno = ptno
End If
End Function
'----- get point source character
Function getptsource(ptno As Long) As String
Dim ptsrc As String * 1
If ChkPIstatus("pipt_pointsource", pipt_pointsource(ptno, ptsrc)) <> 0 Then
ptsrc = ""
'return empty string on error
End If
getptsource = ptsrc
End Function
'----- get point type character
Function getPtType(ptno As Long) As String
Dim pttype As String * 1
If ChkPIstatus("pipt_pointtype", pipt_pointtype(ptno, pttype)) <> 0 Then
pttype = ""
'return empty string on error
End If
getPtType = pttype
End Function
'------------------------------------- get current value from point number
Sub GetSnapshot(ptno As Long, valu As PIVAL)
Dim status As Long
status = ChkPIstatus("pisn_getsnapshot", pisn_getsnapshot(ptno, valu.rval,
valu.timedate))
End Sub
'------------------------------------- sign up for snapshot events on a point
Sub ListenTo(ptno As Long)
Dim count As Long, status As Long
count = 1
status = ChkPIstatus("pisn_evmestablish", pisn_evmestablish(count, ptno))
End Sub
'----- Make this an ordinary (not topmost) window
Sub makenontopmost(theForm As Form)
Dim success As Integer
success = SetWindowPos(theForm.hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, FLAGS)
'success is nonzero when successful
End Sub
'----- Make this window "always on top"
Sub maketopmost(theForm As Form)
Dim success As Integer
Dim winhandle As Long
winhandle = theForm.hWnd
success = SetWindowPos(winhandle, HWND_TOPMOST, 0, 0, 0, 0, FLAGS)
'success is nonzero when successful
End Sub
'----- process rval/istat, return result as string
Function parsePIval(valu As PIVAL, pttype As String) As String
If valu.istat < 0 Then
parsePIval = getDigState(-valu.istat)
ElseIf pttype = "I" Then
'integer tag
parsePIval = Str$(valu.istat)
Else
'real tag
80
valu.istat,
parsePIval = Str$(valu.rval)
End If
End Function
'------------------------------------- parse a PI time string
Function parsetime(s As String, rel As Long) As Long
Dim timestr As String * 19
'must be fixed-length string because API can modify it
Dim result As Long
timestr = s
If ChkPIstatus("pitm_parsetime", pitm_parsetime(timestr, rel, result)) <> 0 Then
result = 0
'return zero on error
End If
parsetime = result
End Function
'-------------------- convert PI time to Excel time
' 1-jan-1970 is 25569 on MS Windows, and there are 86400 seconds in a day.
Function pitime2xl(pitime As Long) As Double
pitime2xl = CDbl(pitime) / 86400 + 25569
End Function
'------------------------------------- stop listening for snapshot events on a point
Sub StopListening(ptno As Long)
Dim count As Long, status As Long
count = 1
status = ChkPIstatus("pisn_evmdisestablish", pisn_evmdisestablish(count, ptno))
End Sub
'----- Change a string into a PI value.
' return 0 if OK, 1 if error
Function StringToPIVAL(theString As String, pttype As String, valu As PIVAL) As Long
Dim theval As Variant
Dim theInt As Integer
StringToPIVAL = 0
'be optimistic, set for OK return
valu.istat = getDigCode(theString)
If valu.istat <> 0 Then
'it is a digital state
valu.rval = 0
ElseIf pttype = "D" Then
MsgBox "Digital value needed"
StringToPIVAL = 1
'error
Else
' point is not digital, value is not digital
theval = CVar(theString)
'see if it's a number
If Not IsNumeric(theval) Then
MsgBox "Numeric value needed"
StringToPIVAL = 1
'error
Else
'point is numeric, value is numeric
valu.rval = theval
'setup for a real point, the usual case
valu.istat = 0
If pttype = "I" Then
'we need an integer
theInt = Int(valu.rval)
If theInt <> valu.rval Or theInt > 32767 Or theInt < 0 Then
MsgBox "Valid integer value needed"
StringToPIVAL = 1 'error
Else 'point is integer, value is integer
valu.istat = valu.rval
valu.rval = 0
End If 'value is integer
End If
'point is integer
End If
'value is numeric
End If
'point is numeric
End Function
81
Anexo D – PI Tag Monitor – Código Fonte do Splash Form
Option Explicit
Private Sub ConnectBtn_Click()
Dim servername As String
Dim theTime As Long
servername = ServerText
ServerFrame.Visible = False
Refresh
Connect servername
theTime = pitm_syncwithservertime()
DisplayForm.Show
Hide
End Sub
Private Sub Form_Load()
Dim dh As Long, dw As Long
'fix the width and height for small/large fonts
dh = Height - ScaleHeight
dw = Width - ScaleWidth
Height = splashimage.Height + dh
Width = splashimage.Width + dw
'center the splash screen
splashscreen.Move
(Screen.Width
splashscreen.Width)
splashscreen.Height) / 2
ServerFrame.Top = ScaleHeight * 0.85 - ServerFrame.Height
ServerFrame.Left = ScaleWidth * 0.95 - ServerFrame.Width
ServerText.SelStart = 0
ServerText.SelLength = Len(ServerText.Text)
GlobalInit
End Sub
82
/
2,
(Screen.Height
-
Anexo E – PI Tag Monitor – Código Fonte do Display Form
Option Explicit
Private Sub Ajudar_Click()
MsgBox "Clique em PROCURAR para
vbExclamation, "PI Tag Monitor Help"
End Sub
selecionar
os
Tags
que
devem
ser
monitorados.",
' Quando o botão PROCURAR é apertado, o programa pára de ouvir todos os tags,
' Vai para o formulário SearchForm, e então volta a ouvir todos os tags de novo.
Private Sub ConfigBtn_Click()
Dim i As Integer
reconfig = False
exceptiontimer.Enabled = False
For i = 0 To ntags - 1
If ptno(i) <> 0 Then
StopListening ptno(i)
End If
Next i
Searchform.Show 1
'mostra o formulário de procura
If reconfig Then
showsnaps
End If
End Sub
' De tempos em tempos (timer), checar se existe algum dado novo.
Private Sub exceptiontimer_Timer()
Dim pt As Long
Dim valu As PIVAL
Dim i As Integer
Do
getEVMexception pt, valu
If pt = 0 Then
Exit Sub
'não existem dados novos
End If
For i = 0 To ntags - 1
If ptno(i) = pt Then
OldVal(i) = parsePIval(valu, pttype(i))
OldTime(i) = FormatTime(valu.timedate)
If unconfirmed(i) Then
If valu.timedate = changetime(i) Then 'verifica se timestamp é o mesmo
unconfirmed(i) = False
End If
End If
End If
Next i
Loop
End Sub
'Após voltar do SearchForm, desabilita o timer e mostra os snapshots atuais.
Private Sub Form_Load()
exceptiontimer.Enabled = False
showsnaps
End Sub
Private Sub Form_Unload(Cancel As Integer)
End
End Sub
Private Sub QuitBtn_Click()
End
End Sub
'Coleta e mostra o valor do snapshot de cada tag,
'e também é setado para monitorar mudanças no valor das variáveis.
Private Sub showsnaps()
Dim i As Integer
Dim timestring As String * 19
Dim valu As PIVAL
Dim TimeStamp As PITimeStamp
Dim
Dim
Dim
Dim
Dim
Dim
Dim
bVal As String * 30
bSize As Long
Mode As Integer
drVal As Long
iVal As Long
istat As Long
FLAGS As Integer
83
For i = 0 To ntags - 1
NameLab(i) = tagname(i)
If ptno(i) > 0 Then
If pttypex(i) <> 105 Then
GetSnapshot ptno(i), valu
OldVal(i) = parsePIval(valu, pttype(i))
OldTime(i) = FormatTime(valu.timedate)
ListenTo ptno(i)
exceptiontimer.Enabled = True
Else
bSize = 30
Mode = 1
apistat = piar_getarcvaluex(ptno(i), Mode, drVal, iVal, ByVal bVal, bSize,
istat, FLAGS, TimeStamp)
OldVal(i) = bVal
OldTime(i) = FormatTime(pitm_systime())
End If
End If
Next i
End Sub
84
Anexo F – PI Tag Monitor – Código Fonte do Search Form
Option Explicit
Private Sub AddAllBtn_Click()
Do While SearchList.ListCount > 0 And OutList.ListCount < ntags
moveitem SearchList, OutList, 0
Loop
If MoveBtn.Caption = ">>" Then
MoveBtn.Enabled = False
End If
EnableButtons 'habilita o botão addall ">> All" se possível
End Sub
Private Sub CanBtn_Click()
Hide
End Sub
Private Sub ClearBtn_Click()
OutList.Clear
If MoveBtn.Caption = "<<" Then
MoveBtn.Enabled = False
End If
EnableButtons
'habilita o botão addall ">> All" se possível
End Sub
Private Sub EnableButtons() 'habilita os botões ">> All" e "OK" se apropriado
AddAllBtn.Enabled = SearchList.ListCount > 0 And OutList.ListCount < ntags
OKBtn.Enabled = OutList.ListCount > 0
End Sub
Private Sub InfoBtn_Click()
MsgBox "Selecione no máximo 16 Tags que você deseje monitorar. Entre os PointSources
selecione: K para variáveis da pesquisa, L para variáveis inseridas manualmente, e B para
variáveis da engenharia.", vbExclamation, "PI Tag Monitor Help"
End Sub
Private Sub MoveBtn_Click()
If MoveBtn.Caption = "<<" Then
movelist OutList, SearchList, -1
ElseIf MoveBtn.Caption = ">>" Then
movelist SearchList, OutList, ntags - OutList.ListCount
End If
End Sub
Private Sub moveitem(src As ListBox, dst As ListBox, index As Integer)
dst.AddItem src.List(index)
dst.ItemData(dst.NewIndex) = src.ItemData(index)
src.RemoveItem index
End Sub
'Move os itens de uma lista para outra
'Entre com a capacidade = quantidade de linhas na lista destino, -1 se ilimitado
Private Sub movelist(src As ListBox, dst As ListBox, ByVal capacity As Integer)
Dim index As Integer
index = 0
Do While index < src.ListCount
If src.Selected(index) Then
If capacity = 0 Then
src.Selected(index) = 0
index = index + 1
Else
moveitem src, dst, index
If capacity > 0 Then
capacity = capacity - 1
End If
End If
Else
index = index + 1
End If
Loop
If src.ListCount = 0 Or capacity = 0 Then
MoveBtn.Enabled = False
End If
src.ListIndex = -1
EnableButtons
'habilita o botão addall ">> All" se possível
End Sub
Private Sub OKBtn_Click()
Dim i As Integer
85
For i = 0 To OutList.ListCount - 1
tagname(i) = OutList.List(i)
ptno(i) = OutList.ItemData(i)
pttype(i) = getPtType(ptno(i))
apistat = pipt_pointtypex(ptno(i), pttypex(i))
Next i
For i = OutList.ListCount To ntags - 1
tagname(i) = ""
ptno(i) = 0
Next i
reconfig = True
Hide
End Sub
Private Sub OutList_Click()
If OutList.ListIndex > -1 Then
MoveBtn.Caption = "<<"
MoveBtn.Enabled = True
Else
MoveBtn.Enabled = False
End If
EnableButtons
'habilita o botão addall ">> All" se possível
End Sub
Private Sub OutList_DblClick()
movelist OutList, SearchList, -1
End Sub
Private Sub SearchBtn_Click()
Dim count As Long
Dim found As Long
Dim numfound As Long
Dim pt As Long
Dim src As String
Dim status As Long
Dim tagmask As String
Dim tagname As String * 80
SearchList.Clear
tagmask = MaskText.Text
count = 0
ProgBar.Width = 0
ProgBar.Visible = True
'pega o primeiro ponto equivalente
status = pipt_wildcardsearch(tagmask, 0, found, tagname, Len(tagname), pt, numfound)
If status = -1 Or numfound = 0 Then 'nenhum ponto encontrado
MsgBox "Nenhum Tag foi encontrado.", vbExclamation, "PI Tag Monitor Message"
Exit Sub
ElseIf ChkPIstatus("pipt_wildcardsearch", status) <> 0 Then
Exit Sub
End If
If found <> 0 Then
'encontrou pelo menos um ponto
Do
'entra em loop até que não encontre mais nenhum ponto
count = count + 1
'atualiza a barra de progressão
ProgBar.Width = ProgBox.Width * count / numfound
src = getptsource(pt)
'are we showing only one source?
If ShowOneSource = 0 Or src = SourceText Then
SearchList.AddItem tagname
'adiciona a lista
SearchList.ItemData(SearchList.NewIndex) = pt 'adiciona o PointNumber também
End If
status = pipt_wildcardsearch(tagmask, 1, found, tagname, Len(tagname), pt, numfound)
If found = 0 Then Exit Do
Loop Until ChkPIstatus("pipt_wildcardsearch", status) <> 0
End If
ProgBar.Visible = False
EnableButtons
'habilita os botões como requerido
End Sub
Private Sub SearchList_Click()
If SearchList.ListIndex > -1 And OutList.ListCount < ntags Then
MoveBtn.Caption = ">>"
MoveBtn.Enabled = True
Else
MoveBtn.Enabled = False
End If
EnableButtons
'habilita os botões como requerido
End Sub
Private Sub SearchList_DblClick()
movelist SearchList, OutList, ntags - OutList.ListCount
End Sub
Private Sub ShowOneSource_Click()
SourceText.Enabled = ShowOneSource.Value
End Sub
86
Anexo G – PI Data Insert – Código Fonte do DataInsert Form
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
tagname As String
PointNumber As Long
PointType As Long
i As Integer
j As Integer
rval As Double
bVal As String
drVal As Long
iVal As Long
bSize As Long
istat As Long
Private Sub AJUDA_Click()
MsgBox "Para inserir um novo valor no banco de dados do PI, basta digitar o valor desejado
na caixa de texto e clicar em ENVIAR.
O formato para data e hora é dd-mmm-yy
hh:mm:ss"
End Sub
Private Sub Atual_Click()
Data.Text = FormatTime(pitm_systime())
End Sub
Private Sub Enviar_Click()
'rotina responsável por enviar o dado coletado nas caixas de texto
'para o servidor do PI
For i = 0 To 19
If i <> 19 Then
If Value(i).Text <> "" Then
tagname = "U144-" + Var(i).Caption
pt = pipt_findpoint(tagname, PointNumber)
pt = pipt_pointtypex(PointNumber, PointType)
If IsNumeric(Value(i).Text) Then
If PointType = 12 Then
'valor real
rval = Value(i).Text
istat = 0
End If
If PointType = 8 Then
'valor inteiro?
If Int(Value(i).Text) = Value(i).Text And Int(Value(i).Text) <= 32767
And Int(Value(i).Text) >= 0 Then
istat = Value(i).Text
rval = 0
Else
MsgBox "Um valor INTEIRO é necessário para " & tagname
Value(i).Text = ""
Value(i).SetFocus
Exit Sub
End If
End If
ElseIf PointType <> 105 Then
'inseriu texto, mas é necessário número
MsgBox "Um valor NUMÉRICO é necessário para " & tagname
Value(i).Text = ""
Value(i).SetFocus
Exit Sub
End If
If PointType = 105 Then
bVal = Value(i).Text
drVal = 0
iVal = 0
bSize = 0
istat = 0
sflag = 0
End If
'string
Envia_Ja
End If
ElseIf Valor.Text <> "" Then
tagname = "U144-" + Var(i).Caption
pt = pipt_findpoint(tagname, PointNumber)
pt = pipt_pointtypex(PointNumber, PointType)
bVal = Valor.Text
87
drVal = 0
iVal = 0
bSize = 0
istat = 0
sflag = 0
Envia_Ja
End If
Next i
Wait.Interval = 500
Wait.Enabled = True
End Sub
Private Sub SAIR_Click()
End
End Sub
Private Sub Wait_Timer()
For j = 0 To 19
Confirma(j).FillColor = &H8000000F
If j = 19 Then
Valor.Text = ""
Else
Value(j).Text = ""
End If
Wait.Enabled = False
Next j
End Sub
Private Sub Envia_Ja()
If PointType <> 105 Then
pitime = parsetime(Data.Text, 0)
If pitime <> "" Then
If ChkPIstatus("piar_putvalue", piar_putvalue(PointNumber, rval, istat,
0)) = 0 Then
unconfirmed = True
Confirma(i).FillColor = RGB(0, 255, 0)
'luz verde
End If
Else
MsgBox "Você precisa especificar data e hora a serem inseridos"
Data.SetFocus
End If
End If
pitime,
If PointType = 105 Then
pitime = parsetime(Data.Text, 0)
If ChkPIstatus("pisn_putsnapshotx", pisn_putsnapshotx(PointNumber, drVal, iVal, ByVal
bVal$, bSize, istat, sflag, pitime)) = 0 Then
unconfirmed = True
Confirma(i).FillColor = RGB(0, 255, 0)
'luz verde
End If
End If
End Sub
88
Anexo H – Supported Input Point Types (ABB/Bailey Data to PI)
Bailey Point
Type
Description
Data
Type
Bailey Function
Code
OIS Type Name
Extended
Attribute
1
Process Variable
A
note 1
Station
No
2
Set Point Read
A
note 1
Station
No
3
Control Output
Read
A
note 1
Station
No
4
Ratio Index Read
A
80, 23
Station
No
5
Analog Read
A
30
Analog
Yes
6
Station Status
D
note 1
Station
Yes
7
Digital Read
D
45
Digital
No
14
Module Status
D
15
RCM Read
D
62
RCM
Yes
19
RMSC Read
A
68
RMSC
Yes
21
4-byte Analog
Read
A
Yes
29
DAANG
A
Yes
30
ASCII string
S
No
51
MSDD
D
129
Yes
52
DD
D
123
Yes
53
RMC
D
Yes
54
DADIG
D
Yes
60
Text Selector
I
No
70
Harmony Analog
Input
A
Yes
71
Harmony Analog
Output
A
Yes
72
Harmony Digital
Input
D
Yes
73
Harmony Digital
Output
D
Yes
No
89
Anexo I – Lista Completa de parâmetros do blysem.bat
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
rem
BLYSEM.bat
OSIsoftware Inc.
command file to start the PI/ABB/Bailey semAPI Interface
Parameters:
Universal Interface parameters (in any order )
/host=X ! specifies host name of PIserver if it is not the
default server defined in pilogin.ini.
/id=X
! interface ID number, Required
/ps=X
! point source for interface. Required
/ec=X
! IO rate counter
/sn
! Overrides exception reporting to use snapshotting
Interface Specific parameters (in any order )
/in=X
! Interface number, should match location1 of PI tags,
if not defined, generated from interface ID string.
/ici=X
! ABB/Bailey logical ICI number, set to interface ID number
if not define
/icdb=X ! interface specific debug level, 0 [def]
/to=X
! ICI timeout (ICI goes offline after not receiving
messages from interface for the timeout period),
90 [def], 0 for no timeout. Maximun timeout is
240 second. Also, interface will restart itself if
getting consecutive errors exceeding the timeout
period.
/fm=X
! failover mode, 0[def] for no failover, 1 for primary,
2 for secondary
/fp=X
! failover Primary PCU address. Required for secondary
/dl=X
! delay [sec] between ABB/Bailey get exceptions:
default one second
/me=X
! Max exceptions per iteration: default is 2500 [def]
/mp=X
! Max number of points for this interface, 30000 [def]
/ef=X
! Exception screening 0=none [def], else 1
/of=X
! Outputs to ABB/Bailey allowed if 1, else 0 [default]
/ts=X
! Time sync [0] default no timesync; 1 -> pi master,
-1 -> ABB/Bailey master
/EVG=X
! Event logger group number for ASCII event
/EVT=X
! event logger type number for ASCII event
/fv=X
/fs=X
/rc
/hncc
!
!
!
!
Analog filter limit (mininum 1000)
Analog filter digital status code(positive or negative)
Range checking at interface level
Must be set if connecting to HNCC and not ICI03
90
Parameter
Explanation
/FM=0
This option controls the fail-over mode of the interface. Specify /FM=1 for the primary
interface and /FM=2 for the secondary interface. Also, for the secondary interface, you
need to supply the PCU number of the ICI mode communicating to the primary
interface. The details of the fail-over mechanism are described in FailOver Operation
section.
/TO=90
This option specifies the ICI module watch dog timer. If the interface stops
communicating with the ICI module for a period longer than the specified watch dog
timer, the ICI module will go off-line, setting all the output points (PI to ABB/Bailey) bad
quality. For systems using PI values in the ABB/Bailey control loops, the watch dog
timer will prevent old value from being used in the control loop. Also, you should not set
the watch dog timer to 0 if the interface is set up as fail over primary interface.
Otherwise, the secondary interface will not pick up data collection when the primary
interface stops communicating with the ICI module. See the FailOver Operation section
for details.
/EF =0
This option controls the exception screening behavior of the ICI module. With exception
screening option enabled, the INFI90 sends only deviation exceptions, no maximum
time exceptions. Though this feature will significantly reduce the communications traffic,
it can prevent the PI system from reconstructing the data between two exception
reports accurately.
For example: if a value changes slowly, then ABB/Bailey would not send the change
until the total change exceeded the deviation limit. Therefore, one cannot distinguish a
step change from a linear change. Hence, this option is set to 0 by default. The EF
option is primarily used for system with mostly digital or discrete data.
/TS=0
This option controls the time synchronization behavior between ABB/Bailey and PI
systems. Note that the interface cannot change the PI system time if the interface is
running on a VMS PINET node or when the interface is running on Windows NT. Also,
if the interface is linked to a Data Acquisition version of semAPI, the interface cannot
set the time on the ABB/Bailey System. When you specify VMS as the time master,
additional configuration is required. The time master of the loop is determined by the
time accuracy factor on each node. Hence, you need to set the time accuracy to 15 or
greater on the CIU module through the CIU utilities by connecting a terminal to the CIU
termination unit. See the CIU manual for details on how to use the CIU utilities.
/EVG= and
/EVT=
Define the Event Logger group and type to be used when ascii data (type 30) is sent to
the Event Logger.
/FV= and
/FS
Analog filter parameters. /FV specific a limit. If the analog values from ABB/Bailey is
greater than this value, they will be replaced by a digital state code (specified by /FS)
by the interface. The FV parameter has to be greater than 1000 to be considered valid
by the interface. If /FV is not specific, no analog filter checking will be performed by the
interface (even if /FS is specified). If /FS is omitted, the interface will default to
NODATA(code 248) as the digital state to substitute the analog value over the filter
limit. The Analog filter check is supported starting in version 1.3.1 of the interface.
/RC
Range Checking enabled at interface level. All analog values above (Zero + Span) will
be replaced with digital state OverRange. All analog values below Zero will be
replaced with digital state UnderRange.
91

Documentos relacionados