TCC-pdf - Nilton Silva
Transcrição
TCC-pdf - Nilton Silva
UNIVERSIDADE FEDERAL DE CAMPINA GRANDE CENTRO DE CIÊNCIAS E TECNOLOGIA UNIDADE ACADÊMICA DE ENGENHARIA QUÍMICA TRABALHO DE CONCLUSÃO DE CURSO Marcílio Máximo da Silva IMPLEMENTAÇÃO DE ALGORITMO DE CONTROLE PID E MÉTODOS DE SINTONIA CLÁSSICA EM PLATAFORMA VBA CAMPINA GRANDE 2014 MARCÍLIO MÁXIMO DA SILVA IMPLEMENTAÇÃO DE ALGORITMO DE CONTROLE PID E MÉTODOS DE SINTONIA CLÁSSICA EM PLATAFORMA VBA Trabalho de Conclusão de Curso apresentado ao Curso de Engenharia Química da Universidade Federal de Campina Grande como requisito para a obtenção do título de Graduado, sob a orientação do Prof. Dr. José Nilton Silva. Campina Grande - Paraíba 2014 MARCÍLIO MÁXIMO DA SILVA IMPLEMENTAÇÃO DE ALGORITMO DE CONTROLE PID E MÉTODOS DE SINTONIA CLÁSSICA EM PLATAFORMA VBA Trabalho de Conclusão de Curso apresentado à Universidade Federal de Campina Grande como requisito parcial para a conclusão do curso de Engenharia Química, sob a orientação do Prof. Dr. José Nilton Silva. Aprovado em 11/03/2014 Banca Examinadora: Dedico esta monografia a toda minha família, em especial ao meu avô Severino Pereira ‘in memoriam’ que sempre me incentivou. AGRADECIMENTOS Aos meus pais, Manoel Máximo da Silva e Josefa Maria de Lima Silva, minhas referências de vida, pela orientação, incentivo e amor incondicional, em todas as fases da minha vida. Ao meu irmão, Marlon Emanuel Silva, pelo apoio e amizade acima de tudo. À Mariana, pelo apoio, companheirismo, paciência e amor. À Adalício pelo trabalho em equipe no desenvolvimento desta pesquisa. Aos todos os meus amigos do curso de Engenharia Química. Ao Professor Dr. José Nilton Silva, pelo conhecimento me passado, pela sua atenção, acompanhamento, compreensão, dedicação e paciência, prestados em cada fase deste trabalho. À todos os Professores do Departamento de Engenharia Química, pelo conhecimento passado ao longo do curso. A cada pessoa que, a sua maneira, contribuiu com esta pesquisa. A mente que se abre a uma nova ideia, jamais voltará ao seu tamanho original. (Albert Einsten) LISTA DE FIGURAS Figura 1 – Diagrama de blocos para uma função de transferência genérica ........................................ 16 Figura 2 – Sistema de Controle de Processo feedback. ........................................................................ 17 Figura 3 – Comportamento do desvio dos Controladores, P, PI e PID, em relação ao tempo. ............ 18 Figura 4 – Ilustração dos intervalos de discretização ........................................................................... 19 Figura 5 – Ilustração da curva de reação do processo .......................................................................... 21 Figura 6 – Diagrama do Aspen® Dynamics da coluna de destilação e malhas de controle ................. 26 Figura 7 – Algoritmo simplificado do programa do controlador PID desenvolvido no VBA ............. 27 Figura 8 – Algoritmo simplificado do programa de sintonia desenvolvido no VBA .......................... 28 Figura 9 – Interface da planilha do Algoritmo do PID. ....................................................................... 29 Figura 10a – Interface de comunicação da ferramenta de sintonia de controladores. ......................... 30 Figura 11b – Interface de execução e visualização da ferramenta de sintonia de controladores. ........ 30 Figura 12 – Curva de reação do processo após degrau de 5% na variável manipulada (Controlador FFC) ...................................................................................................................................................... 31 Figura 13 – Parâmetros do processo obtidos após aplicação do Método da Curva de reação (Controlador FFC). ................................................................................................................................ 31 Figura 14 – Parâmetros do controlador PID obtidos após aplicação do Método de ZN (Controlador FFC) ...................................................................................................................................................... 32 Figura 15 – Parâmetros do controlador PID obtidos após aplicação do Método de CHR (Controlador FFC). ..................................................................................................................................................... 32 Figura 16 – Parâmetros do controlador PID obtidos após aplicação do Método de CC (Controlador FFC) ...................................................................................................................................................... 33 Figura 17 – Curva de reação do processo após degrau de 5% na variável manipulada (Controlador PCOLC)................................................................................................................................................. 34 Figura 18 – Parâmetros do processo obtidos após aplicação do Método da Curva de reação (Controlador PCOLC) ........................................................................................................................... 34 Figura 19 – Parâmetros do controlador PID obtidos após aplicação do Método de ZN (Controlador PCOLC)................................................................................................................................................. 35 Figura 20 – Parâmetros do controlador PID obtidos após aplicação do Método de CHR (Controlador PCOLC)................................................................................................................................................. 35 Figura 21 – Parâmetros do controlador PID obtidos após aplicação do Método de CC (Controlador PCOLC)................................................................................................................................................. 36 LISTA DE TABELAS Tabela 1 – Sintonia usando o método de Ziegler-Nichols em malha aberta ........................................ 22 Tabela 2 – Sintonia usando o método de Chien, Hrones e Reswick com critério de 20% de sobressinal ............................................................................................................................................................... 23 Tabela 3 – Sintonia usando o método de Cohen e Coon ...................................................................... 23 Tabela 4 – Código de comunicação entre VBA e Aspen® Dynamics.................................................. 26 LISTA DE SIGLAS P – Proporcional PI – Proporcional, Integral PID – Proporcional, Integral, Derivativo VBA – Visual Basic Application OLE – Object Linking and Embedding SISO – Simple-input and Simple-output ZN – Ziegler & Nichols CHR – Chien, Hrones, Reswick CC – Cohen & Coon FFC – Controlador de fluxo da alimentação PCOLC – Controlador de pressão de topo da coluna ISE – Integral of the square of the error IAE – integral of absolute magnitude of the error IATE – Integral of time multiplied by the absolute value of error ITSE – Integral of time multiplied by the square of error SUMÁRIO 1 INTRODUÇÃO ................................................................................................................ 13 1.1 OBJETIVOS .................................................................................................................. 14 1.1.1 Geral ........................................................................................................................... 14 1.1.2 Específicos ................................................................................................................. 14 2 REVISÃO BIBLIOGRÁFICA .......................................................................................... 15 2.1 MODELAGEM E CONTROLE DE PROCESSOS ...................................................... 15 2.2 LEIS DE CONTROLE E A ESTRATÉGIA FEEDBACK ........................................... 16 2.3 CONTROLADORES PID ............................................................................................. 17 2.4 MÉTODOS DE SINTONIA DE CONTROLADORES ............................................... 19 2.4.1 Método de Ziegler-Nichols ........................................................................................ 20 2.4.2 Método de Chien, Hrones e Reswick ......................................................................... 22 2.4.3 Método de Cohen e Coon .......................................................................................... 23 2.5 3 CONTROLE DE COLUNAS DE DESTILAÇÃO ....................................................... 24 MATERIAIS E MÉTODOS ............................................................................................. 25 3.1 MATERIAIS ................................................................................................................. 25 3.2 MÉTODOS .................................................................................................................... 25 3.2.1 Procedimentos ............................................................................................................ 25 3.2.2 Programação do algoritmo do PID em plataforma VBA ........................................... 26 3.2.3 Programação dos métodos de sintonia de controladores PID em plataforma VBA .. 27 4 RESULTADOS E DISCUSSÕES .................................................................................... 29 4.1 ANÁLISE DA FERRAMENTA DO ALGORITMO DO PID ..................................... 29 4.2 ANÁLISE DA FERRAMENTA DOS MÉTODOS DE SINTONIA ............................ 30 4.2.1 Aplicação da ferramenta de sintonia para o controlador FFC ................................... 31 4.2.2 Aplicação da ferramenta de sintonia para o controlador PCOLC.............................. 33 5 CONCLUSÕES ................................................................................................................. 37 6 REFERÊNCIAS BIBLIOGRÁFICAS .............................................................................. 38 APÊNDICE I ............................................................................................................................ 40 APÊNDICE II ........................................................................................................................... 47 SILVA, Marcílio Máximo da. Implementação de Algoritmo de Controle PID e Métodos de Sintonia Clássica em Plataforma VBA. 2014. 59p. Trabalho de Conclusão de Curso. Engenharia Química. Universidade Federal de Campina Grande, 2014. Orientador: Dr. José Nilton Silva. RESUMO O presente trabalho teve por finalidade implementar o algoritmo clássico de controle PID e as estratégias clássicas de sintonia de controladores, em plataforma VBA (Visual Basic Application), no intuito de aplicação em sistemas de controle de plantas de processos, utilizando um sistema integrado com Aspen® Dynamics. Para avaliação da ferramenta, foi utilizada uma planta de processo composta por uma coluna de destilação de uma unidade de tratamento de Nafta modelada em Aspen® Dynamics, à mesma previamente validada com dados reais de planta. As malhas de controle testadas foram as de controles de níveis, fluxos, pressão e temperaturas equivalentes às malhas da planta real. As perturbações observadas na planta real foram consideradas, a saber: variações de vazão e de composição de carga, distúrbios nas utilidades de resfriamento e aquecimento da coluna. A ferramenta desenvolvida utilizou como base de obtenção dos parâmetros de sintonia o método de curva de reação. O controlador PID implementado em VBA foi avaliado quanto a mudanças no ponto de operação e distúrbios inseridos na planta de modo que o desempenho final do sistema foi satisfatório. Palavras-chave: Controle de Processo, PID, Sintonia de controladores. SILVA, Marcílio Máximo da. Implementation of PID Control Algorithm and Classical Tuning Methods in VBA Platform. 2014. 59p. Completion of Course Work. Chemical Engineering. Federal University of Campina Grande, 2014. Advisor: Dr. José Nilton Silva. ABSTRACT This paper aims to implement the classic PID control algorithm and the classic strategies for tuning controllers on the platform in VBA (Visual Basic Application) to application in to control systems processes using an integrated system with Aspen® Dynamics. To evaluate the tool, a process plant comprises a distillation column of a unit treatment of Naphtha simulated in Aspen® Dynamics, the plant used was previously validated with actual plant data. The control loops tested were: controls of level, of flow, temperature and pressure, such loops control are equivalent to the actual plant. The disturbances observed in the actual plant were considered, namely: variations in flow and composition of load disturbances in the utility cooling and heating of the column. The tool developed utilized as a basis for obtaining the tuning parameters of the reaction curve method. The PID controller implemented in VBA was evaluated for changes in operating point and inserted disturbances in the plant so that the final system performance has been satisfactory. Keywords: Process Control, PID, Controllers tuning. 13 1 INTRODUÇÃO Sistemas dinâmicos, tais como plantas industriais, estão sujeitos a perturbações diversas, e por isso se faz necessário controladores para possam operar dentro das especificações desejadas. De forma geral, é importante que o processo esteja sempre próximo de um dado ponto estacionário de operação, sendo o papel dos controladores: minimizar os efeitos externos que tentam desviá-lo desta condição. Os pontos de operação podem ser definidos a requisitos de qualidade, segurança do processo, redução do impacto ambiental, adaptação às restrições inerentes ao processo (equipamento, material, etc.), otimização ou resultado econômico do processo. De acordo com Luyben e Luyben (1997) existem quatro níveis de controle de processo. Movendo-se estes níveis aumenta a importância, o impacto econômico e as oportunidades para engenheiros de controle de processo fazerem contribuições significativas. O nível mais baixo é o ajuste do controlador, ou seja, determinar os valores dos parâmetros de sintonia do controlador que resultam em um melhor controle. O segundo nível é algorítmico, decidir que tipo de controlador usar (P, PI, PID, multivariado, modelo preditivo, etc.). O terceiro nível é a estrutura de controle do sistema, que terá o papel de determinar o que controlar e o que manipular, e como combinar uma variável controlada com uma variável manipulada (chamado de "emparelhamento"). A seleção da estrutura de controle para uma planta é uma função de vital importância, visto que uma boa escolha de estrutura irá facilitar a seleção de um algoritmo apropriado e a sintonia. O nível superior é a etapa de desenvolvimento de um fluxograma de processo, usando parâmetros do projeto, que produz uma planta facilmente controlável. A planta em estado estacionário economicamente ótimo pode ser muito mais difícil de controlar do que uma planta alternativa fora do ponto ótimo, pois requer uma otimização global do processo, desde a construção até a operação da planta. A literatura apresenta-se com poucas publicações na utilização do Excel e plataforma VBA para a aplicação em Controle de Processos, fazendo com que o presente trabalho seja considerado uma contribuição significativa, para esse tipo de aplicação tanto em nível industrial como acadêmico. Aliane (2009) desenvolveu em seu trabalho uma ferramenta para análise e projeto de sistemas de controle baseados em planilhas de Excel. A ferramenta é um conjunto de subrotinas e funções desenvolvidas com o VBA, no entanto, a ferramenta é limitada a sistemas de operação linear, representados por uma função de transferência pré-determinada. O usuário 14 pode especificar modelos para obter as respostas transientes no domínio da frequência, para simular um sistema feedback através de um controlador, ou ajustar os parâmetros de um controlador de forma interativa. Sendo assim, este trabalho visa o estudo e implementação, em plataforma VBA, do algoritmo clássico do controlador PID, para utilização em plantas modeladas no simulador Aspen® Dynamics, introduzindo também as metodologias clássicas de sintonia no intuito de criar um ambiente de treinamento de sistemas de controle e operacionalidade de plantas de processo. 1.1 OBJETIVOS 1.1.1 Geral Este trabalho tem como objetivo geral a implementação na plataforma VBA do algoritmo clássico de controle PID e os métodos de sintonia clássica propostos por Ziegler e Nichols (1942), Chien et. al. (1952) e Cohen e Coon (1953). Através da comunicação OLE (“Object Linking and Embedding”) com Aspen® Dynamics para avaliar a aplicação dos métodos de sintonia clássicos em malhas de controle para sistemas em plantas de processos modeladas no Aspen® Dynamics. 1.1.2 Específicos Materializar o conceito de Controle clássico de processos; Aprofundar o emprego do VBA e Aspen®; Materializar o conceito de leis de controle para sistemas SISO (“simple-input and simple-output”) baseado no controle clássico PID; Estruturar a identificação do processo a partir dos dados dinâmicos em tempo real; Estabelecer a comunicação entre VBA e Aspen® no intuito de aplicação de métodos de sintonia clássicos em modelos de processos disponíveis no Aspen® Dynamics; Avaliar o desempenho das estratégias de sintonia implementadas, aplicada em plantas de processos modeladas no Aspen® Dynamics e analisar os resultados obtidos; 15 2 REVISÃO BIBLIOGRÁFICA 2.1 MODELAGEM E CONTROLE DE PROCESSOS Controlar um processo significa atuar sobre ele ou sobre as condições a que o processo está sujeito, de modo a atingir algum objetivo (OGATA, 1982). Geralmente o objetivo é manter o processo sempre próximo de um dado valor desejado (set point), através da manipulação de certas variáveis de processo para ajustar as variáveis de interesse, com o intuito de minimizar os efeitos externos que tentam desviá-lo desta condição. Este estado estacionário pode ter sido escolhido por atender melhor aos requisitos de qualidade, segurança do processo, satisfazer as restrições ambientais, adaptação às restrições inerentes ao processo (equipamento, material, etc.), otimização, uso mais eficientes de matérias-primas e energia ou aumento da rentabilidade (LUYBEN; LUYBEN, 1997; STEPHANOPOULOS, 1984; COUGHANOWR e LeBLANC, 2009). Para desenvolvimento de projetos sistemas de controle, a modelagem dinâmica é fundamental. Trata-se de uma representação matemática do processo que pode ser determinada a partir da aplicação de equações de balanços de massa, energia e quantidade de movimento e de equações constitutivas (cinéticas, termodinâmicas, entre outras) (STEPHANOPOULOS, 1984). A modelagem matemática de processos irá resultar em um conjunto de equações diferenciais, no domínio tempo. No entanto, com o intuito de facilitar a análise, faz-se o uso das transformadas de Laplace para obtenção de sistemas de equações algébricas, onde é possível avaliar a região de estabilidade e controlabilidade para os processos de maneira mais simples. Além de possibilitar a avaliação o comportamento dinâmico do processo através das funções de transferências que relacionam entrada/saída do sistema (LUYBEN; LUYBEN, 1997; STEPHANOPOULOS, 1984; COUGHANOWR e LeBLANC, 2009). Segundo Coughanowr e LeBlanc (2009), uma função de transferência relaciona duas variáveis em um processo físico, umas destas é a causa (função de força ou variável de entrada), e a outra é o efeito (resposta ou variável de saída). A Equação 1 representa matematicamente a forma genérica de uma função de transferência com um atraso de tempo, que é apresentada em forma de diagrama de blocos na Figura 1. G( s) Y ( s) an s n an1 s n1 ... a0 s 0 s e , mn X ( s) bm s m bm1 s m1 ... b0 s 0 (1) 16 onde: G(s) é a função de transferência, expressando como a saída Y (s) se comporta com a entrada X (s) . Figura 1 – Diagrama de blocos para uma função de transferência genérica Fonte: COUGHANOWR e LeBLANC (2009) Adaptado 2.2 LEIS DE CONTROLE E A ESTRATÉGIA FEEDBACK Uma lei de controle é um conjunto de regras que são utilizadas para determinar os comandos a serem enviados a um sistema, baseado em um estado desejado. Tais leis são utilizadas, por exemplo, para ditar como uma temperatura de um reator é corrigida para uma temperatura desejada pré-definida, enviando comandos para um atuador. As leis de controle mais conhecidas foram propostas por Luyben (1990): i) Primeira Lei: “O sistema de controle mais simples que irá fazer o trabalho é o melhor”. ii) Segunda Lei: “Deve-se entender o processo antes que se possa controlá-lo”. A literatura apresenta diversas estratégias de controle de processos, que é aplicada de acordo com a necessidade de melhores objetivos de controle ou de exigências do processo. Dentre as estratégias conhecidas, a aplicação de controladores por retroalimentação (feedback) é comum, consiste da comparação do resultado obtido na saída do processo com o valor desejado (set point) (SVRCEK, et. al. 2006). Segundo Stephanopoulos (1984), a estratégia feedback, consiste de três etapas: (1) medidas da variável controlada, y m , são coletadas usando um equipamento de medida apropriado; (2) o valor da variável controlada é comparado com o valor de set point, y SP , e o desvio (erro, ) é calculado como sendo ySP ym ; (3) o valor do desvio é fornecido para o controlador principal. O controlador, por sua vez altera o valor da variável manipulada, m , de modo a reduzir a magnitude do desvio . Normalmente, o controlador não afeta a variável manipulada diretamente, mas através de outro dispositivo, conhecida como um elemento de final controle (normalmente 17 uma válvula). A Figura 2 a seguir apresenta a representa a estrutura feedback em diagrama de blocos. Figura 2 – Sistema de Controle de Processo feedback Fonte: COUGHANOWR e LeBLANC (2009) 2.3 CONTROLADORES PID Em 1935, Ralph Clarridge da Taylor Instrument Companies criou o controlador de três termos, ao utilizar um controlador que antecipava a variação no sinal de erro para solucionar um problema de oscilação de uma malha de controle de temperatura em uma indústria de celulose. Chamada inicialmente de pelos engenheiros da empresa de pré-act, a ação derivativa foi testada apenas em casos especiais até o ano de 1939, quando uma versão totalmente reprojetada do controlador Proporcional Integral Derivativo, o PID Fulscope foi oferecida como padrão nos sistemas de controle comerciais da empresa (ASTROM, 2012). O controlador PID é normalmente aplicado para sistemas SISO (simple-input and simple output), em que a ação do controlador atua diretamente em uma variável manipulada (MV) para ajustar uma variável de processo (PV), onde as mesmas estão relacionadas através de um modelo representativo do processo (SVRCEK, 2006). Esse tipo de controle, PID, segundo Aström (1995) é a forma mais comum de controle de malha fechada e consiste em criar comandos de controle calculando as ações proporcional, integral e derivativa, em relação a um valor de set point previamente definido. Por causa da ação integral, o controlador consegue fazer a saída do processo acompanhar o sinal de referências, ou seja, minimizar o desvio do processo em relação ao set point, além de rejeitar perturbações constantes de carga, no entanto, possui uma desvantagem quando o processo apresenta desvios elevados, podendo ultrapassar os limites físicos de atuação na variável manipulada através do elemento final de controle. A ação derivativa contribui para melhoria 18 da velocidade de resposta, por calcular a tangente em cada instante de tempo, antecipando a resposta do controlador para minimizar o desvio, porém, a ação derivativa apresenta problemas para processos que apresentam ruídos, podendo levar o sistema à instabilidade. A ação proporcional reduz o tempo de alcance da referência (set point) para o processo, contudo, não consegue zerar o valor do desvio, fazendo com que exista sempre um resíduo. A Figura 3 apresenta o comportamento do desvio dos controladores, Proporcional, ProporcionalIntegral e Proporcional-Integral-Derivativo, em relação ao tempo. Figura 3 – Comportamento do desvio dos Controladores, P, PI e PID, em relação ao tempo Fonte: COUGHANOWR e LeBLANC (2009) A equação clássica do PID no domínio tempo pode ser apresentada por: f c (t ) f s kc e(t ) kc i e(t )dt kc d 0 de(t ) dt (2) onde: f c (t ) é saída do controlador, f s é o valor do estado estacionário do sistema, kc , i e d são as constantes proporcional, tempo integral e tempo derivativo, respectivamente e e(t ) é o desvio entre o processo e setpoint. A implementação digital da expressão matemática da equação 2, contínua no domínio do tempo, requer a sua discretização. Tomando um intervalo de tempo t , que traduz a periodicidade com que o controlador calcula uma nova ordem de comando, sendo o índice k que representa o instante de tempo e corresponde ao instante em que o valor t tem unidades de tempo, de um modo genérico, o erro nos dois instantes anteriores, ek 1 e ek 2 pode ser expresso por: 19 tk 1 e(t )dt e(t k 2 ).(t k 1 t k 2 ) tk 2 (e(t k 1 ) e(t k 2 )) 2 (3) Da mesma forma o erro nos dois instantes anteriores, ek e ek-1, podem ser expressos por: tk e (t ) tk 1 (e(tk ) e(tk 1 )) dt e(tk 1 ).(tk tk 1 ) 2 (4) As duas parcelas das equações 3 e 4 estão mostradas na figura 4. Figura 4 – Ilustração dos intervalos de discretização t t 1 t 2 e (t ) dt t n e (t ) dt e (t ) dt t 1 t 2 A equação 2 pode ser escrita na forma discreta para o ponto k a k 1 como segue: mc (tk ) f s kc e(tk ) kc i k e k n mc (tk 1) f s kc e(tk 1 ) kc i (t ) t kc d k 1 e k n (t ) (e(tk ) e(tk 1) ) t kc d t (e(tk 1) e(tk 2) ) t (5) (6) A variação entre os pontos k a k-1 pode ser escrita por: mc kc (e(tk ) e(tk 1 )) kc (e(tk ) e(tk 1 )) [e(tk ) 2e(tk 1 ) e(tk 2 )] t kc d i 2 t (7) A equação 7 é uma das equações digitais que possibilita implementar a lei de controle PID em um computador ou microprocessador. 2.4 MÉTODOS DE SINTONIA DE CONTROLADORES Mesmo em uma década em que os algoritmos de controle avançados, principalmente com base em algum tipo de procedimento de otimização, terem alcançado um alto grau de maturidade, controladores Proporcional Integral Derivativo (PID), ainda são amplamente 20 utilizados nas indústrias de processo. Sua popularidade se deve à sua simplicidade e o desempenho satisfatório de controle mostrado para a grande maioria das aplicações. No entanto, os três parâmetros do controlador PID devem ser ajustados de forma adequada para que o controlador apresente um melhor desempenho para manter o processo no ponto de operação (LIU; DALEY, 2001; PEDRET, et al. 2002; SYRCOS; KOOKOS, 2005). A tarefa de sintonia de controladores PID, na maioria dos casos é realizada de forma empírica, através do método de tentativa e erro ou aproximações sucessivas, pelos operadores e técnicos responsáveis pelo processo sob controle. A tarefa basicamente consiste em variar os parâmetros do controlador e avaliar o impacto destas variações junto à variável de saída do processo. Ainda assim, por vezes, encontrar o conjunto de ganhos satisfatórios para o início da operação de um dado processo pode resultar em uma tarefa bastante laboriosa e nada sistemática, porém, o uso do método da tentativa e erro está sempre presente na sintonia de controladores, seja antes de utilizar técnicas mais sofisticas ou para ajuste fino de parâmetros já estimados. Nos últimos 50 anos, foram desenvolvidos vários métodos de determinação dos parâmetros do controlador PID. Atualmente, o desenvolvimento de regras de sintonia de controladores PID têm sido um dos principais focos de pesquisa na área de controle de processos. A partir dos trabalhos originais de Ziegler-Nichols (ZIEGLER e NICHOLS, 1942) e Cohen e Coon (COHEN e COON, 1953), foram propostos um grande número de métodos com diferentes abordagens. O'Dwyer (2009) apresentou uma extensa coleção de regras de sintonia para controladores PID, que exibem a abundância de projetos de controladores PID baseados em modelos. Svrcek (2006) define a sintonia de controladores como um processo de otimização que envolve um critério de desempenhos relacionados com a forma de resposta do controlador e com o erro entre a variável de processo e o set point. 2.4.1 Método de Ziegler-Nichols O trabalho de Ziegler e Nichols (1942) foi inovador, pois foi a primeira metodologia objetiva e simples para sintonizar controladores PID. Foram propostos dois métodos: o de malha aberta e o de malha fechada. O método de malha aberta pressupõe que o processo pode ser modelado por um sistema de primeira ordem, mais atraso de tempo, como a função de transferência apresentada na Equação 8. No entanto, para o método em malha fechada, o controlador é definido na sua 21 forma proporcional e a definição do ganho é ajustada até a resposta do processo ser uma onda periódica, com isso podendo ser calculado o ganho crítico e o período crítico. A partir de tais parâmetros críticos, os valores dos parâmetros de sintonia do controlador PID podem ser calculados de acordo com a Tabela 1 (ZIEGLER e NICHOLS, 1942). G p ( s) K e s s 1 (8) onde: K é o ganho do processo, a constante de tempo e o atraso de tempo (tempo morto). O procedimento em malha aberta, onde o controlador não é utilizado, consiste em aplicar um degrau na entrada do sistema, obtendo-se assim a curva de reação do processo, da qual obtêm-se as informações de atraso de tempo, constante de tempo, que é a diferença entre tempo para o sistema chegar a 63,2% do valor final e o tempo em que começa a responder, e o ganho do processo, como ilustra a Figura 5. Com tais valores calculam-se os parâmetros do controlador a partir da Tabela 1. Figura 5 – Ilustração da curva de reação do processo 22 Tabela 1 – Sintonia usando o método de Ziegler-Nichols em malha aberta Controlador kc i d P K - - PI 0,9 K 3,33 - PID 1,2 K 2 0,5 Fonte: ZIEGLER e NICHOLS (1942) As equações desenvolvidas por Ziegler e Nichols utilizam critério de razão de queda de ¼ e são adequadas para correção rápida de perturbações. No entanto, apresentam algumas limitações com relação a atrasos de tempo. A sintonia é apropriada para processos nos quais a razão entre o atraso de tempo e a constante de tempo do processo ( / ) está entre 0,1 e 0,3 (ZIEGLER e NICHOLS, 1942). Essa razão também é conhecida como razão de incontrolabilidade, e quanto maior essa razão, maior a dificuldade de controlar o processo, chegando a casos onde a sintonia leva a sistemas instáveis. Uma prática comum, nesses casos de dificuldade de controle, é diminuir o ganho proporcional e aumentar o tempo integral, no caso de um controlador PI, tornando o sistema estável ao custo de uma resposta lenta. 2.4.2 Método de Chien, Hrones e Reswick Este método propõe dois critérios de desempenho: a resposta mais rápida possível sem sobressinal e a resposta mais rápida com sobressinal máximo de 20%. Realiza-se, da mesma forma que o método de Ziegler-Nichols, aplicando o teste em malha aberta, obtêm-se os valores de , e K . Calculam-se os parâmetros do controlador a partir da Tabela 2, tendo como critério de desempenho uma resposta com sobressinal máximo de 20%. Assim como o método de Ziegler-Nichols, o método CHR também é aceitável para sistemas com razão de incontrolabilidade baixa (CHIEN et al., 1952). À medida que esta razão aumenta a resposta do sistema se torna lenta. 23 Tabela 2 – Sintonia usando o método de Chien, Hrones e Reswick com critério de 20% de sobressinal Controlador kc i d P 0,7 / K - 0 PI 0,6 / K 0 PID 0,95 / K 1,357 0,473 Fonte: CHIEN et al., (1952) 2.4.3 Método de Cohen e Coon Este método, assim como Ziegler-Nichols e CHR, pressupõe que o processo pode ser representado por um modelo de primeira ordem mais atraso de tempo e de acordo com o mesmo procedimento de aplicação de um degrau na entrada. O método de CHR possui um critério de desempenho satisfatório para sistemas com elevada taxa de incontrolabilidade. Deve-se obter as informações de , e K . Por sua vez, obtêm-se os parâmetros do controlador utilizando a Tabela 3. Tabela 3 – Sintonia usando o método de Cohen e Coon Controlador kc i d P 1,35 0,35 K - - 0,9 0,083 K 0,9 0,083 1.27 0,6 - 1,35 0,25 K 0,35 0,25 1,54 0,33 PI PID 0,5 1,35 0,25 Fonte: COHEN e COON, (1953) O objetivo desse método é de obter sintonias para sistemas com atrasos de tempo elevado, portanto, ele não é adequado para razões de incontrolabilidade menores que 2 24 (COHEN e COON, 1953), podendo nesses casos deixar o sistema instável. Tal método também costuma apresentar sintonias agressivas, devido a este fato uma boa prática é, inicialmente, diminuir os ganhos proporcional e derivativo da Tabela 3 e aumentá-los em função do comportamento do processo. 2.5 CONTROLE DE COLUNAS DE DESTILAÇÃO A destilação é o processo de separação mais utilizado na indústria química. Devido ao fato de ser um processo que consome uma grande quantidade de energia, é fundamental conhecer adequadamente o seu funcionamento, para que se possa aplicar técnicas eficientes de controle, obtendo-se assim, o rendimento máximo do processo, bem como um produto final de elevada pureza, com menor consumo energético (FRANCHI, 2010). Colunas de destilação necessitam de sistemas de controle capazes de rejeitar flutuações que ocorrem com frequência, mesmo quando o processo está operando em regime permanente. O comportamento não-linear, associado ao acoplamento das variáveis, restrições da operação, constantes de tempo elevadas e a presença de atraso nas respostas, geram transientes elevados quando o processo é perturbado (MARANGONI, 2005). 25 3 MATERIAIS E MÉTODOS 3.1 MATERIAIS Dado que o trabalho a ser desenvolvido é essencialmente de natureza teórica, os materiais incluídos estão diretamente envolvidos e fazem parte de um sistema computacional de alto desempenho juntamente com os seus periféricos. 3.2 MÉTODOS 3.2.1 Procedimentos Uma unidade de tratamento de Nafta foi utilizada no presente trabalho, sendo a mesma modelada na plataforma Aspen® Dynamics, previamente validada com dados reais de planta. Para avaliar a estrutura da sintonia proposta neste trabalho, uma coluna de destilação depentanizadora foi considerada, como mostrado no diagrama simplificado na Figura 6. A coluna adotada para o estudo é constituída por 37 estágios, com uma carga de alimentação média de 57,55 ton/hr, composta de C1 a C11 de compostos parafínicos e aromáticos mais representativos da carga real do processo. A finalidade desta coluna é separar os componentes maiores que C5 na corrente de base e os menores e iguais a C5 na corrente de destilado. A partir da planta implementada na plataforma Aspen® Dynamics, a conexão com VBA (Visual Basic Application) foi realizada utilizando a tecnologia de comunicação OLE (Object Linking and Embedding) suportada por ambas as plataformas. 26 Figura 6 – Diagrama do Aspen® Dynamics da coluna de destilação e malhas de controle 3.2.2 Programação do algoritmo do PID em plataforma VBA O algoritmo de controle PID foi implementado em plataforma VBA, em sua forma discretizada representada pela Equação 7, de acordo com o diagrama de blocos apresentado na Figura 6. Inicialmente a comunicação entre o Aspen® Dynamics é estabelecida, em seguida, informações são fornecidas através da planilha e o controlador PID é conectado ao processo. Com o intuito de avaliar a performance de atuação do controlador sobre o processo, aplica-se um distúrbio no set point e avalia-se a atuação do controlador sobre o sistema. O acesso as variáveis internas na simulação foi possível considerando a linha de código padrão como mostra a Tabela 4. A string path é referente ao caminho do arquivo, enquanto Object Variable correspondente a variável ao acesso de entrada ou saída no Aspen®. O Apêndice I apresenta o código em VBA referente ao algoritmo da Figura 7. Tabela 4 – Código de comunicação entre VBA e Aspen® Dynamics Acesso Input Output ='Aspen Dynamics Language'|'path *.dynf'!'\Object Variable.Value' 27 Figura 7 – Algoritmo simplificado do programa do controlador PID desenvolvido no VBA O diagrama de blocos apresentado na Figura 7 consiste do procedimento de utilização da ferramenta do algoritmo do PID, onde estão apresentados: o bloco de entradas manuais em que se inserem valores nas células da planilha; o bloco de decisão para verificar a comunicação do sistema, seguindo pelo bloco, onde se conecta o sistema de armazenando de acesso direto; o bloco de processamento para o cálculo da ação do PID a ser tomada e impressão dos gráficos, utilizando os dados do banco de dados, e o bloco de finalização do programa. 3.2.3 Programação dos métodos de sintonia de controladores PID em plataforma VBA A ferramenta de sintonia foi implementada em plataforma VBA de acordo com o diagrama de blocos apresentado na Figura 8. Inicialmente a comunicação entre o Aspen® Dynamics é estabelecida, em seguida o código foi executado com a indicação de quem estava operando a ferramenta, aplicando os procedimentos necessários para obtenção dos parâmetros de ajuste ( k p , p , ). Posteriormente, escolhe-se o método de sintonia que será utilizado para estimação dos parâmetros do controlador ( kc , i , d ). O Apêndice II apresenta o código em VBA referente ao algoritmo da Figura 8. 28 Figura 8 – Algoritmo simplificado do programa de sintonia desenvolvido no VBA O diagrama de blocos apresentado na Figura 8 consiste do procedimento de utilização da ferramenta dos métodos de sintonia, onde estão apresentados: o bloco de entrada manual em que se inserem as informações sobre a PV, MV e variáveis do controlador a flag de indicação do manual ou automático nas células da planilha; seguido pelo bloco de decisão para verificar a comunicação do sistema; o bloco onde se conecta o sistema, o qual fica armazenando os dados coletados no Aspen® Dynamics, no bloco de armazenamento e acesso direto; bloco de decisão para aplicação do teste do degrau, onde neste caso, sendo o primeiro loop do processo a ferramenta irá acessar o degrau na variável manipulada e ficará no loop armazenando os dados até aplicar o critério de decisão de finalizar o teste do degrau. O bloco seguinte, referente à finalização do teste do degrau, o bloco de processamento de estimação dos parâmetros do modelo e em seguida o bloco de processamento que irá estimar os parâmetros de sintonia de acordo com o método escolhido. Posteriormente é possível decidir se os parâmetros de sintonia estimados serão atualizados no Aspen® Dynamics, seguido pelo bloco de processamento de conversão do ganho do processo em valores percentuais. Por fim, a ferramenta irá acessar o controlador no Aspen® Dynamics para fazer o update dos parâmetros de sintonia, com os parâmetros atualizados tem-se a opção de finalização do programa. 29 Com o intuito de analisar a funcionalidade das ferramentas desenvolvidas, controlador PID e dos métodos de sintonia clássicos, realizou-se testes na planta desenvolvida no Aspen® Dynamics. 4 RESULTADOS E DISCUSSÕES 4.1 ANÁLISE DA FERRAMENTA DO ALGORITMO DO PID Conforme visualizado na Figura 9, a interface de execução da ferramenta desenvolvida em Excel, onde o código foi executado através de macros criados em Plataforma VBA. É possível observar que a interface de aplicação da ferramenta é bastante simples, tornando-se uma ferramenta que pode ser facilmente aplicada em diversas análises. A ferramenta foi aplicada no controle de vazão de alimentação da coluna de destilação, onde pode ser observado que a comunicação pôde ser evidenciada, tendo em vista que o sistema faz o cálculo e atuação direta no sistema, ou seja, a ferramenta nos leva a comprovar que o processo de comunicação e aplicação do controlador PID, desenvolvido na plataforma VBA, atua de forma eficiente no que diz respeito ao controle da variável analisada no processo simulado pelo Aspen® Dynamics. Figura 9 – Interface da planilha do Algoritmo do PID. 30 4.2 ANÁLISE DA FERRAMENTA DOS MÉTODOS DE SINTONIA As Figuras 10a e 10b apresentam as interfaces de execução da ferramenta desenvolvida em Excel, onde o código foi executado através de macros criados em Plataforma VBA. A Figura 10a apresenta a interface de comunicação entre o Excel e o Aspen® Dynamics, onde os valores são constantemente capturados e apresentados na planilha durante a simulação. A Figura 10b apresenta a interface onde se realizou o Teste do Degrau para obter os parâmetros do processo ( k p , p , ) e estimar os parâmetros do controlador ( kc , i , d ), pelos métodos de sintonia clássicos. No gráfico apresentado na Figura 10b, no momento em que o sistema apresentar um comportamento estacionário para a variável de processo, o teste do degrau pode ser finalizado para estimação dos parâmetros do modelo. Figura 10a – Interface de comunicação da ferramenta de sintonia de controladores Figura 11b – Interface de execução e visualização da ferramenta de sintonia de controladores 31 4.2.1 Aplicação da ferramenta de sintonia para o controlador FFC Inicialmente a ferramenta de sintonia foi aplicada para o controlador de vazão de alimentação da coluna (Controlador FFC), em que se aplicou o Método da Curva de reação e obtêm-se a curva de reação do processo e os parâmetros de ajuste k p , p , . A Figura 11 apresenta a curva de reação do processo. Com base nos dados obtidos a partir da curva de reação, estes foram ajustados para um modelo de 1ª ordem com atraso de tempo, utilizando o solver do Excel. No solver do Excel, inicialmente é definida a célula da soma dos erros quadráticos para ser minimizada para zero, simultaneamente estimando os valores de constante de tempo ( p ) e tempo morto ( ), partindo-se de estimativas iniciais. A Figura 12 apresenta os valores obtidos após a execução dos procedimentos do código. Figura 12 – Curva de reação do processo após degrau de 5% na variável manipulada (Controlador FFC) Figura 13 – Parâmetros do processo obtidos após aplicação do Método da Curva de reação (Controlador FFC) Após a obtenção dos parâmetros do processo, pode-se aplicar os métodos de sintonia propostos. 32 a) Método de Ziegler-Nichols Após a obtenção dos parâmetros do processo, foi aplicado o Método de ZN, segundo a Tabela 1, para obter os parâmetros de sintonia do controlador PID ( kc , i , d ). A Figura 13 apresenta os parâmetros obtidos após a aplicação do método. Figura 14 – Parâmetros do controlador PID obtidos após aplicação do Método de ZN (Controlador FFC) b) Método de Chien, Hrones e Reswick Ainda utilizando os parâmetros do processo, pode-se aplicar o Método de CHR, segundo a Tabela 2, para obter os parâmetros de sintonia do controlador PID ( kc , i , d ). A Figura 14 apresenta os parâmetros obtidos após a aplicação do método. Figura 15 – Parâmetros do controlador PID obtidos após aplicação do Método de CHR (Controlador FFC) 33 c) Método de Cohen & Coon Novamente utilizando os parâmetros do processo, pode-se aplicar o Método de CC, segundo a Tabela 3, para obter os parâmetros de sintonia do controlador PID ( kc , i , d ). A Figura 15 apresenta os parâmetros obtidos após a aplicação do método. Figura 16 – Parâmetros do controlador PID obtidos após aplicação do Método de CC (Controlador FFC) 4.2.2 Aplicação da ferramenta de sintonia para o controlador PCOLC Com o intuito de verificar a funcionalidade da ferramenta em outra malha de controle, foi aplicada a ferramenta de sintonia para o controlador de pressão do topo da coluna (Controlador PCOLC), em que se aplicou o Método da Curva de Reação e obteve-se a curva de reação do processo e os parâmetros de ajuste k p , p , . A Figura 16 apresenta a curva de reação do processo. Com base nos dados obtidos a partir da curva de reação, estes foram ajustados para um modelo de 1ª ordem com atraso de tempo, utilizando o solver do Excel. Da mesma forma descrita anteriormente, no solver do Excel, defini-se a célula da soma dos erros quadráticos para ser minimizada para zero, simultaneamente estimando os valores de constante de tempo ( p ) e tempo morto ( ), partindo-se de estimativas iniciais. A Figura 17 apresenta os valores obtidos após a execução dos procedimentos do código 34 Figura 17 – Curva de reação do processo após degrau de 5% na variável manipulada (Controlador PCOLC) Figura 18 – Parâmetros do processo obtidos após aplicação do Método da Curva de reação (Controlador PCOLC) Após a obtenção dos parâmetros do processo, podem-se aplicar os métodos de sintonia propostos. a) Método de Ziegler-Nichols Após a obtenção dos parâmetros do processo, foi aplicado o Método de ZN, segundo a Tabela 1, para obter os parâmetros de sintonia do controlador PID ( kc , i , d ). A Figura 18 apresenta os parâmetros obtidos após a aplicação do método. 35 Figura 19 – Parâmetros do controlador PID obtidos após aplicação do Método de ZN (Controlador PCOLC) b) Método de Chien, Hrones e Reswick Ainda utilizando os parâmetros do processo, foi aplicado o Método de CHR, segundo a Tabela 2, para obter os parâmetros de sintonia do controlador PID ( kc , i , d ). A Figura 19 apresenta os parâmetros obtidos após a aplicação do método. Figura 20 – Parâmetros do controlador PID obtidos após aplicação do Método de CHR (Controlador PCOLC) c) Método de Cohen & Coon Novamente utilizando os parâmetros do processo, o Método de CC foi aplicado, segundo a Tabela 3, para obter os parâmetros de sintonia do controlador PID ( kc , i , d ). A Figura 20 apresenta os parâmetros obtidos após a aplicação do método. 36 Figura 21 – Parâmetros do controlador PID obtidos após aplicação do Método de CC (Controlador PCOLC) De acordo com todos os resultados apresentados, observou-se que a ferramenta desenvolvida para aplicar métodos de sintonia clássicos, apresenta-se de forma eficiente, sendo possível aplicar todos os métodos propostos e obter os respectivos parâmetros de sintonia do controlador PID. E interessante destacar que a ferramenta aplicada em diferentes malhas de controle com comportamentos dinâmicos distintos (Malha de Controle de Vazão e Malha de Controle de Pressão), apresenta-se de forma efetiva e ambos os casos. A ferramenta não foi aplicada para as demais malhas de controle presentes da Coluna de destilação, pois estas apresentavam respostas instáveis quando aplicáva-se o Método da curva de Reação, por se tratar de um método de malha aberta. Um forma de aplicar os métodos de sintonia para estas malhas, seria através do Método do Relé, ou seja um método e malha fechada, assim como aplicar métodos de auto-sintonia. 37 5 CONCLUSÕES De acordo com o desenvolvimento desde trabalho, foi possível materializar o conhecimento da Área de Controle de Processos diante da aplicação do software Aspen® Dynamics juntamente com o desenvolvimento e programação na plataforma do Excel, Visual Basic Application - VBA. Foi possível observar que as ferramentas desenvolvidas apresentam boa funcionalidade para diferentes situações de estratégias de controle. Diante do que foi obtido no presente trabalho, pode-se concluir que a ferramenta de controle PID e de sintonia baseada na curva de reação pode ser utilizada para fins acadêmicos e avaliação de modelos de plantas industriais, por apresentar uma fácil execução através de uma interface simples. Enfim, o presente trabalho atingiu os objetivos propostos inicialmente, e possui perspectivas de melhoria, assim como facilitar estudos na área de controle permitindo gerar resultados para fins de publicações em meios científicos e acadêmicos. Sugestões para trabalhos futuros Inserir na ferramenta alguns critérios de análise de desempenho, como o ISE, IAE, IATE e ITSE; Avaliar o desempenho dos controladores no Aspen® Dynamics com a atualização dos parâmetros de sintonia estimados na ferramenta; 38 6 REFERÊNCIAS BIBLIOGRÁFICAS ALIANE, N.; Herramienta de Análisis y Diseño de Sistemas de Control Basada em hojas de Cálculo Excel. Revista Iberoamericana de Automática e Informática Industrial, v. 6, p. 44-50, 2009. ASTROM, K.; HAGGLUND, T.; PID Controllers: Theory, Design and Tuning. 2nd Edition, Instrument Society of America, NC, 1995. ASTROM, K. J.; Process Control. Lecture 3. Department of Automatic Control LTH, LundUniversity. Disponível em: http://www.control.lth.se/media/Education/DoctorateProgram/2012/HistoryOfControl/L03Pro cessControleight.pdf, acessado em 10 de Janeiro de 2014. CHIEN, K.L.; HRONES, J.A.; RESWICK, J.B.; On the Automatic Control of Generalized Passive Systems. Trans. ASME, v. 74, p. 175-185, 1952. COHEN, G.H.; COON, G.A.. Theoretical Consideration of Retarded Control. Trans. ASME, v. 75, p. 827-834, 1953. COUGHANOWR, D. R.; LeBLANC, S. E.; Process Systems Analysis and Control. 3rd Edition, MsGraw-Hill’s, NY, 2009. FRANCHI, C. M.; Aplicação de Estratégias de Controle em Coluna de destilação. Tese (Doutorado), Universidade Estadual de Maringá, - Programa de Doutorado em Engenharia Química, Maringá , 208 p., 2010. LIU, G. P.; DALEY, S.; Optimal-tunig PID control for industrial systems. Control Engineering Practice, v. 9, p. 1185-1194, 2001. LUYBEN, W.L.; Process Modeling, Simulation and Control for Chemical Engineers. 2nd Edition, McGraw-Hill International Editions, 1990. LUYBEN, W. L.; LUYBEN M. L.; Essentials of Process Control, McgrawHill, NY, 1997. MARANGONI, C.; Implementação de uma estratégia de controle com ação distribuída e uma Coluna de Destilação. Tese (Doutorado), Universidade Federal de Santa Catarina - Programa de Pós-Graduação em Engenharia Química, Florianópolis, 151 p., 2005. 39 O’DWYER, A.; Handbook of PI and PID controller tuning rules. 3rd Edition, Imperial College Press, 2009. OGATA, K.; Engenharia de Controle Moderno, Prentice-Hall do Brasil; 1982. PEDRET, C.; VILANOVA, R.; MORENO, R.; SERRA, I.; A refinement procedure for PID controller tuning. Computers and Chemical Engineering, v. 26, p. 903-908, 2002. STEPHANOPOULOS, G., Chemical Process Control. An Introduction to Theory and Practice, Prentice Hall , NJ, 1984. SVRCEK, W. Y.; MAHONEY, D. P.; A Real-time approach to process control. 2nd Edition, Jonh Wiley & Sons, 2006. SYRCOS, G.; KOOKOS, I. K.; PID controller tuning using mathematical programming. Chemical Engineering and Processing, v. 44, p. 41-49, 2005. ZIEGLER, J. G.; NICHOLS, N. B.; Optimum settings for automatic controllers. Trans ASME, v. 64, p. 759-768, 1942. 40 APÊNDICE I 1. Código Referente ao programa PID 'Option Base 1 ' Todos as matrizes serão de base 1 Option Explicit ' Todas as variáveis especificades ' Variáveis Globais Dim RunStatus As Integer Dim StatusSet As Integer '-------------------------------------------------Sub Captura_dados_Clique() Dim ACMobj As Object ' Cria um objeto para a comunicação Dim NVarName As Long ' Número de variáveis desejada na comunicação Dim i As Long ' Contador para as variáveis de comunicação Dim File As String ' Caminho do arquivo de Simulação ADYN ' Obtem o endereço do arquivo armazenado na planilha File = Worksheets("Controlador").Cells(1, 1).Value ' Comunicação com Apen Dynamic Set ACMobj = GetObject(File) ACMobj.Application.Visible = True ' Habilita o objeto para ser visualizado pelo excel ' Em caso da planta no Aspen Dynamincs rodando pula o error gerado On Error Resume Next ACMobj.Run (False) ' Verifica o número de variáveis a serem lidas: ' Ler as variáveis e escreve o valor corrente para as mesmas ' Escreve o valor corrente da variável de processo-PV: Worksheets("Controlador").Cells(3, 3).Value = "='Aspen Dynamics Language'|'" & File & " '!'\ " & Worksheets("Controlador").Cells(3, 2).Value & ".Value'" ' Escreve a unidade da variável PV: Worksheets("Controlador").Cells(3, 4).Value = "='Aspen Dynamics Language'|'" & File & " '!'\ " & Worksheets("Controlador").Cells(3, 2).Value & ".Units'" ' Escreve o valor corrente da variável de processo-PV: Worksheets("Controlador").Cells(6, 10).Value = "='Aspen Dynamics Language'|'" & File & " '!'\ " & Worksheets("Controlador").Cells(3, 2).Value & ".Value'" ' Escreve a unidade da variável PV: Worksheets("Controlador").Cells(6, 11).Value = "='Aspen Dynamics Language'|'" & File & " '!'\ " & Worksheets("Controlador").Cells(3, 2).Value & ".Units'" ' Escreve o valor corrente da variável manipulada: Worksheets("Controlador").Cells(3, 7).Value = "='Aspen Dynamics Language'|'" & File & " '!'\ " & Worksheets("Controlador").Cells(3, 6).Value & ".Value'" ' Escreve a unidade da variável: Worksheets("Controlador").Cells(3, 8).Value = "='Aspen Dynamics Language'|'" & File & " '!'\ " & Worksheets("Controlador").Cells(3, 6).Value & ".Units'" ' Inserindo os valores mínimos e máximos: Worksheets("Controlador").Cells(4, 3).Value = 0 Worksheets("Controlador").Cells(4, 4).Value = Worksheets("Controlador").Cells(3, 4).Value Worksheets("Controlador").Cells(5, 3).Value = Format(2 * Worksheets("Controlador").Cells(3, 3).Value, "0.0") Worksheets("Controlador").Cells(5, 4).Value = Worksheets("Controlador").Cells(3, 4).Value Worksheets("Controlador").Cells(4, 7).Value = 0 Worksheets("Controlador").Cells(5, 7).Value = 100 Worksheets("Controlador").Cells(4, 8).Value = Worksheets("Controlador").Cells(3, 8).Value Worksheets("Controlador").Cells(5, 8).Value = Worksheets("Controlador").Cells(3, 8).Value '---------------------------------------------------' Escrevendo os cabeçalhos na planilha para saida de dados: Worksheets("Controlador").Cells(1, 12).Value = "Time,hr" Worksheets("Controlador").Cells(1, 13).Value = Worksheets("Controlador").Cells(3, 2).Value Worksheets("Controlador").Cells(1, 14).Value = "SetPoint" Worksheets("Controlador").Cells(1, 15).Value = Worksheets("Controlador").Cells(3, 6).Value 41 ' Inseri o caminho do arquivo no objeto de comunicação Set ACMobj = GetObject(File) ACMobj.pause ' Pausa/Encerra a comunicação do objeto ' Caso código inserido em um botão:o ' Unload UserFormVar ' Fecha o UserForm e limpa a memória End Sub '---- Fim do procedimento Botão1_Clique -----------------------'======================= Sub CBConectarSistema() '------------------Dim ACMobj As Object, ACMObj2 As Object Dim File As String Dim NSteptest As Integer, GetDataName As String Dim VarName As String, Variablename As String Dim Index1 As Long Dim Pausetime As Double, TimeStep As Double, NumberCase As String Dim CriarGraficos As String Dim ix As Long, i As Long, jx As Long Dim NomeControle As String, Value() As String ' Vetores das variáveis: PV, MV e TIME Dim PVV() As Double, MVV() As Double Dim SPV() As Double, TIMEV() As Double Dim pont As Long Dim InitialSP As Double, Start As Double '--------------------------------------Dim Vtime() As Double, VPV() As Double, VMV() As Double, VSP() As Double Dim ContVTPV As Long Dim CurrentTime As Double, CurrentValuePV As Double Dim CurrentValueMV As Double, CurrentValueSP As Double Dim Lastline As Long, ValorAnterior As Double '------------------------Dim VPV0 As Double, VPV1 As Double, VPV2 As Double, VPV3 As Double Dim VSP0 As Double, VMV0 As Double, DTime0 As Double, DTime1 As Double '------------------------' Local do arquivo Aspen Dynamics: File = Worksheets("Controlador").Cells(1, 1).Value 'Old file path ' Comunicação com Apen Dynamic Set ACMobj = GetObject(File) ACMobj.Application.Visible = True ' Número do caso: NSteptest = 1 ' Nome da Planilha GetDataName = "Controlador" 'Chama a função que iniciao Aspen Call CBRunAspenStepTest ' Busca o nome da variável MV VarName = Worksheets("Controlador").Cells(3, 6).Value Variablename = Worksheets("Controlador").Cells(3, 6).Value ' Número de pontos a serem mostrados no graáfico: pont = Worksheets("Controlador").Cells(13, 3).Value ' Obtem o valor corrente da variável de processo: ReDim VPV(pont) ReDim VMV(pont) ReDim TIMEV(pont) ReDim VSP(pont) '------------ReDim PVV(pont) ReDim MVV(pont) ReDim Vtime(pont) ReDim SPV(pont) 42 ' Status de simulação do Aspen Dynamics RunStatus = 1 ' 1 Running, 0 Stoped StatusSet = 0 ' 0 no dset ' Index de inicio de armazenamento de dados na planilha Index1 = 2 ' Define o passo de captura de dados Pausetime = Worksheets("Controlador").Cells(12, 3).Value ' Fixa o inicio da aplicação do degrau TimeStep = CDbl(0) ' Obtem o valor corrente na planilha oculta e adiciona um degrau ' Especifica o número do caso: NumberCase = GetDataName ' Inicia a criação de gráficos: CriarGraficos = "True" If CriarGraficos = "True" Then Call CriarGrafico(CriarGraficos) End If ' Valor inicial do Setpoint Worksheets("Controlador").Cells(6, 10).Value = Worksheets("Controlador").Cells(3, 3).Value ix = 1 ' Contodor primario para matrizes ContVTPV = 0 DTime1 = ACMobj.Application.Simulation.time '==================================================== ' Loop de cauptura de dados das variáveis controladas GoToStartstep: ' Ler e armazena os valores das variáveis: If ix <= pont Then TIMEV(ix) = ACMobj.Application.Simulation.time Worksheets("Controlador").Cells(14, 3).Value = TIMEV(ix) VPV(ix) = CDbl(Worksheets("Controlador").Cells(3, 3).Value) VSP(ix) = CDbl(Worksheets("Controlador").Cells(6, 10).Value) VMV(ix) = CDbl(Worksheets("Controlador").Cells(3, 7).Value) Else TIMEV(ix - 1) = ACMobj.Application.Simulation.time Worksheets("Controlador").Cells(14, 3).Value = TIMEV(ix - 1) VPV(ix - 1) = CDbl(Worksheets("Controlador").Cells(3, 3).Value) VSP(ix - 1) = CDbl(Worksheets("Controlador").Cells(6, 10).Value) VMV(ix - 1) = CDbl(Worksheets("Controlador").Cells(3, 7).Value) End If ' Variáveis auxiliares para as variáveis Dim PVaux() As Double, SPaux() As Double Dim MVaux() As Double, TIMEaux() As Double If ix <= pont Then ' Continua armazenando For i = 1 To ix - 1 Worksheets("Controlador").Cells(i + 1, 12).Value = TIMEV(i) Worksheets("Controlador").Cells(i + 1, 13).Value = VPV(i) Worksheets("Controlador").Cells(i + 1, 14).Value = VSP(i) Worksheets("Controlador").Cells(i + 1, 15).Value = VMV(i) Next i ix = ix + 1 ' Variáveis auxiliares para as variáveis PVaux = VPV SPaux = VSP MVaux = VMV TIMEaux = TIMEV Else 'Escreve as variáveis: For i = 2 To ix - 1 Worksheets("Controlador").Cells(i, 12).Value = TIMEV(i) 43 Worksheets("Controlador").Cells(i, 13).Value = VPV(i) Worksheets("Controlador").Cells(i, 14).Value = VSP(i) Worksheets("Controlador").Cells(i, 15).Value = VMV(i) Next i ' Andar um passo nas variáveis ix = pont + 1 jx = jx + 1 PVaux = VPV SPaux = VSP MVaux = VMV TIMEaux = TIMEV For i = 1 To pont - 1 '-----------------------VPV(i) = PVaux(i + 1) VSP(i) = SPaux(i + 1) VMV(i) = MVaux(i + 1) TIMEV(i) = TIMEaux(i + 1) Next i End If '------------------------------' Valores atuais das variáveis: CurrentTime = CDbl(Worksheets("Controlador").Cells(14, 3).Value) CurrentValuePV = CDbl(Worksheets("Controlador").Cells(3, 3).Value) CurrentValueSP = CDbl(Worksheets("Controlador").Cells(6, 10).Value) CurrentValueMV = CDbl(Worksheets("Controlador").Cells(3, 7).Value) ' Coluna time Vtime(ContVTPV) = CurrentTime ' Variáveis resposta PVV(ContVTPV) = CurrentValuePV SPV(ContVTPV) = CurrentValueSP MVV(ContVTPV) = CurrentValueMV '---------' Atualiza os vetores: ReDim Preserve Vtime(ContVTPV + 1) ReDim Preserve PVV(ContVTPV + 1) ReDim Preserve SPV(ContVTPV + 1) ReDim Preserve MVV(ContVTPV + 1) ContVTPV = ContVTPV + 1 Index1 = Index1 + 1 ' Coluna time Worksheets("Dados").Cells(1, 1).Value = "Time,hr" Worksheets("Dados").Cells(ix, 1).Value = CDbl(Worksheets("Controlador").Cells(14, 3).Value) ' Escreve o valor corrente da PV Worksheets("Dados").Cells(1, 2).Value = Worksheets("Controlador").Cells(3, 2).Value Worksheets("Dados").Cells(ix, 2).Value = CDbl(Worksheets("Controlador").Cells(14, 3).Value) ' Reescreve o valor corrente SP Worksheets("Dados").Cells(1, 3).Value = "SetPoint" Worksheets("Dados").Cells(ix, 3).Value = CDbl(Worksheets("Controlador").Cells(6, 10).Value) ' Reescreve o valor corrente MV Worksheets("Dados").Cells(1, 3).Value = Worksheets("Controlador").Cells(3, 6).Value Worksheets("Dados").Cells(ix, 3).Value = CDbl(Worksheets("Controlador").Cells(3, 7).Value) ' Chama a função que atualiza o gráfico: Lastline = (Sheets(NumberCase).Range("L" & Rows.Count).End(xlUp).Row) - 1 Call AtualizarGrafico(Lastline) '---------------------------' Inicio do algoritmo PID If ix <= pont And ix >= 5 Then VPV0 = PVaux(ix - 1) 44 VPV1 = PVaux(ix - 2) VPV2 = PVaux(ix - 3) VPV3 = PVaux(ix - 4) VSP0 = SPaux(ix - 1) VMV0 = MVaux(ix - 1) DTime0 = TIMEaux(ix - 1) End If If ix >= pont Then VPV0 = PVaux(ix - 1) VPV1 = PVaux(ix - 2) VPV2 = PVaux(ix - 3) VPV3 = PVaux(ix - 4) VSP0 = SPaux(ix - 1) VMV0 = MVaux(ix - 1) DTime0 = TIMEaux(ix - 1) End If ' Chama função com o controlador PID If ix > 5 Then If DTime0 - DTime1 >= 0.1 Then Call AlgoritmoPID(ACMobj, VPV0, VPV1, VPV2, VPV3, VSP0, VMV0, DTime0, DTime1, VarName) DTime1 = TIMEaux(ix - 1) End If End If ' Escreve os dados na Planilha durante tempo de simulção especificado Start = Timer ' Set start time. Do While Timer < Start + CDbl(Pausetime) DoEvents ' Yield to other processes. Loop ' Verifica variação no setpoint: If StatusSet = 1 Then ' Chama o procedimento de mudança no setpoint Call Dsetpoint End If ' Verificação de condição de retorno If RunStatus = 1 Then GoTo GoToStartstep Else ' Finaliza loop End If End Sub Private Sub CBRunAspenStepTest() Dim File As String Dim ACMobj As Object File = Worksheets("Controlador").Cells(1, 1).Value 'Old file path ' Comunicação com Apen Dynamic Set ACMobj = GetObject(File) ACMobj.Application.Visible = True ACMobj.Application.Simulation.runmode = "Dynamic" On Error Resume Next ' In case we are already running ACMobj.Run (False) End Sub '===================================================== Sub Dsetpoint() If Worksheets("Controlador").Cells(8, 9).Value = 2 Then Worksheets("Controlador").Cells(6, 10).Value = CDbl(Worksheets("Controlador").Cells(6, 10).Value) + CDbl(Worksheets("Controlador").Cells(8, 10).Value / 100) * CDbl(Worksheets("Controlador").Cells(6, 10).Value) End If 45 If Worksheets("Controlador").Cells(8, 9).Value = 3 Then Worksheets("Controlador").Cells(6, 10).Value = CDbl(Worksheets("Controlador").Cells(6, 10).Value) CDbl(Worksheets("Controlador").Cells(8, 10).Value / 100) * CDbl(Worksheets("Controlador").Cells(6, 10).Value) End If StatusSet = 0 End Sub '=============================== Sub StatusSet_click() '-----------------StatusSet = 1 End Sub '=============================== '====================================================== ' Algoritmo PID Sub AlgoritmoPID(ACMobj, VPV0, VPV1, VPV2, VPV3, VSP0, VMV0, DTime0, DTime1, VarName) '-----------------------------------------Dim e0 As Double, e1 As Double, e2 As Double Dim kc As Double, ti As Double, td As Double Dim Dt As Double Dim Dmc As Double Dim LHIIN As Double, LHIOUT As Double Dim LLOIN As Double, LLOOUT As Double '-------------------------------------Dim ACMObj2 As Object ' Cria um objeto para a comunicação Dim File2 As String ' Caminho do arquivo de Simulação ADYN Dim InitialSP As Double ' ------------------------------------' Limites PV LHIIN = Worksheets("Controlador").Cells(5, 7).Value LLOIN = Worksheets("Controlador").Cells(4, 7).Value ' Limites OP LHIOUT = Worksheets("Controlador").Cells(5, 3).Value LLOOUT = Worksheets("Controlador").Cells(4, 3).Value '-------------------------------------' Desvios: If CDbl(Worksheets("Controlador").Cells(12, 4).Value) = 3 Then e0 = (VSP0 - VPV0) e1 = (VSP0 - VPV1) e2 = (VSP0 - VPV2) End If If CDbl(Worksheets("Controlador").Cells(12, 4).Value) = 2 Then e0 = -(VSP0 - VPV0) e1 = -(VSP0 - VPV1) e2 = -(VSP0 - VPV2) End If ' Parâmetros de sintonia: kc = CDbl(Worksheets("Controlador").Cells(3, 10).Value) ti = CDbl(Worksheets("Controlador").Cells(4, 10).Value) td = CDbl(Worksheets("Controlador").Cells(5, 10).Value) 'K(%/%) = kc*(PVmax-PVmin)/(OPmax-OPmin) kc = kc * ((LHIIN - LLOIN) / (LHIOUT - LLOOUT)) Dt = CDbl(Worksheets("Controlador").Cells(12, 3).Value) 'Dt = (DTime1 - DTime0) Dmc = kc * (e0 - e1) + ((kc / ti) * (e0 + e1) / 2) * Dt + kc * td * (e0 - 2 * e1 + e2) / Dt '-----------------------------------------' Atualizando dados no Aspen Dynamics: ACMobj.Application.Simulation.Flowsheet.Resolve(VarName).Value = VMV0 + Dmc 46 On Error Resume Next ' Pula o erro se o Aspen estiver rodando Dt = (DTime1 - DTime0) End Sub '==================== '================== Sub CBRunStatus() ' Desabilita conexão RunStatus = 0 End Sub '================== Sub AjustEscalay1() Worksheets("Controlador").Cells(20, 4).Value = 1 * 10 ^ (-(Worksheets("Controlador").Cells(21, 4).Value)) End Sub Sub AjustEscalay2() Worksheets("Controlador").Cells(25, 4).Value = 1 * 10 ^ (-(Worksheets("Controlador").Cells(26, 4).Value)) End Sub 47 APÊNDICE II 2. Código referente o programa de sintonia baseado na curva de reação 'Option Base 1 ' Todos as matrizes serão de base 1 Option Explicit ' Todas as variáveis especificades ' Variáveis Globais Dim RunStatus As Integer Dim StatusStep As Integer ' Status para aplicação do degrau: 0 - não, 1 - sim Dim StatusStop As Integer Dim StatusStepON As Integer Dim SteptestON As Integer Dim StatusCalcPar As Integer Dim StatusUpdatePar As Integer '-------------------------------------------------Sub Captura_dados_Clique() Dim ACMobj As Object ' Cria um objeto para a comunicação Dim NVarName As Long ' Número de variáveis desejada na comunicação Dim i As Long ' Contador para as variáveis de comunicação Dim File As String ' Caminho do arquivo de Simulação ADYN Dim NomeControle As String Dim Value() As String ' Obtem o endereço do arquivo armazenado na planilha File = Worksheets("Variáveis").Cells(1, 1).Value ' Comunicação com Apen Dynamic Set ACMobj = GetObject(File) ACMobj.Application.Visible = True ' Habilita o objeto para ser visualizado pelo excel ' Em caso da planta no Aspen Dynamincs rodando pula o error gerado On Error Resume Next ACMobj.Run (False) ' Verifica o número de variáveis a serem lidas: ' Ler as variáveis e escreve o valor corrente para as mesmas ' Escreve o valor corrente da variável de processo-PV: Worksheets("Variáveis").Cells(3, 3).Value = "='Aspen Dynamics Language'|'" & File Worksheets("Variáveis").Cells(3, 2).Value & ".Value'" ' Escreve a unidade da variável PV: Worksheets("Variáveis").Cells(3, 4).Value = "='Aspen Dynamics Language'|'" & File Worksheets("Variáveis").Cells(3, 2).Value & ".Units'" ' Escreve o valor corrente da variável de processo-PV: Worksheets("Variáveis").Cells(4, 3).Value = "='Aspen Dynamics Language'|'" & File Worksheets("Variáveis").Cells(4, 2).Value & ".Value'" ' Escreve a unidade da variável PV: Worksheets("Variáveis").Cells(4, 4).Value = "='Aspen Dynamics Language'|'" & File Worksheets("Variáveis").Cells(4, 2).Value & ".Units'" ' Escreve setpoint Worksheets("StepTest").Cells(4, 10).Value = "='Aspen Dynamics Language'|'" & File Worksheets("Variáveis").Cells(4, 2).Value & ".Value'" Worksheets("StepTest").Cells(4, 11).Value = "='Aspen Dynamics Language'|'" & File Worksheets("Variáveis").Cells(4, 2).Value & ".Units'" ' Escreve o valor corrente da variável manipulada: Worksheets("Variáveis").Cells(3, 7).Value = "='Aspen Dynamics Language'|'" & File Worksheets("Variáveis").Cells(3, 6).Value & ".Value'" ' Escreve a unidade da variável: Worksheets("Variáveis").Cells(3, 8).Value = "='Aspen Dynamics Language'|'" & File Worksheets("Variáveis").Cells(3, 6).Value & ".Units'" ' Escrevendo os limites para a PV e MV do controlador: NomeControle = Worksheets("Variáveis").Cells(4, 2).Value & " '!'\ " & & " '!'\ " & & " '!'\ " & & " '!'\ " & & " '!'\ " & & " '!'\ " & & " '!'\ " & & " '!'\ " & 48 Value = Split(NomeControle, ".") NomeControle = Value(0) ' Limites PV Worksheets("StepTest").Cells(6, 9).Value = "PVMax = " Worksheets("StepTest").Cells(6, 10).Value = "='Aspen Dynamics Language'|'" & File & NomeControle & ".PVMax.Value'" Worksheets("StepTest").Cells(7, 9).Value = "PVMin = " Worksheets("StepTest").Cells(7, 10).Value = "='Aspen Dynamics Language'|'" & File & NomeControle & ".PVMin.Value'" ' Limites OP Worksheets("StepTest").Cells(6, 11).Value = "OPMax = " Worksheets("StepTest").Cells(6, 12).Value = "='Aspen Dynamics Language'|'" & File & NomeControle & ".OPMax.Value'" Worksheets("StepTest").Cells(7, 11).Value = "OPMin = " Worksheets("StepTest").Cells(7, 12).Value = "='Aspen Dynamics Language'|'" & File & NomeControle & ".OPMin.Value'" ' Variável manual auto Worksheets("Variáveis").Cells(3, 10).Value = NomeControle & ".AutoMan" Worksheets("Variáveis").Cells(3, 11).Value = "='Aspen Dynamics Language'|'" & File & NomeControle & ".Automan.Value'" '---------------------------------------------------' Escrevendo os cabeçalhos na planilha Step Test: Worksheets("StepTest").Cells(1, 1).Value = "Time,hr" Worksheets("StepTest").Cells(1, 2).Value = Worksheets("Variáveis").Cells(3, 2).Value Worksheets("StepTest").Cells(2, 9).Value = Worksheets("Variáveis").Cells(3, 2).Value & " = " Worksheets("StepTest").Cells(1, 3).Value = Worksheets("Variáveis").Cells(3, 4).Value Worksheets("StepTest").Cells(2, 11).Value = Worksheets("Variáveis").Cells(3, 4).Value Worksheets("StepTest").Cells(4, 9).Value = "SetPoint" & " = " Worksheets("StepTest").Cells(4, 11).Value = Worksheets("Variáveis").Cells(3, 4).Value Worksheets("StepTest").Cells(1, 4).Value = Worksheets("Variáveis").Cells(3, 6).Value Worksheets("StepTest").Cells(3, 9).Value = Worksheets("Variáveis").Cells(3, 6).Value & " = " Worksheets("StepTest").Cells(3, 11).Value = Worksheets("Variáveis").Cells(3, 8).Value ' Status da atualização: 0, não atualiza, 1 atualizando Worksheets("StepTest").Cells(3, 12).Value = "0" ' Inseri o caminho do arquivo no objeto de comunicação Set ACMobj = GetObject(File) ACMobj.pause ' Pausa/Encerra a comunicação do objeto ' Caso código inserido em um botão: ' Unload UserFormVar ' Fecha o UserForm e limpa a memória End Sub '---- Fim do procedimento Botão1_Clique -----------------------'======================= Sub CBConectarSistema() '------------------Dim ACMobj As Object, ACMObj2 As Object Dim numlist1 As Long Dim File As String, File2 As String Dim NSteptest As Integer, GetDataName As String Dim NvarControl As Integer Dim VarNameProces As String, VarName As String, Variablename As String Dim Index1 As Long Dim Pausetime As Double, TimeStep As Double, NumberCase As String Dim CriarGraficos As String Dim NvarManip As Long, Ntypevar1 As Long, ix As Long, i As Long Dim StepDegrau As Double Dim NomeControle As String, Value() As String ' Vetores das variáveis: PV, MV e TIME Dim PVV() As Double, MVV() As Double " '!'\ " & " '!'\ " & " '!'\ " & " '!'\ " & " '!'\ " & 49 Dim PVSPV As Double, TIMEV() As Double Dim pont As Long Dim InitialSP As Double, Start As Double '--------------------------------------Dim Vtime() As Double, VPV() As Double, VMV() As Double Dim ContVTPV As Long Dim DeltaMV As Double Dim InitialTime As Double, InitialValuePV As Double, InitialValueMV As Double Dim CurrenceTime As Double, CurrenceValuePV As Double Dim CurrenceValueMV As Double Dim GetDataNamestep As String Dim Lastline As Long, NCIndex As Long '------------------------' Local do arquivo Aspen Dynamics: File = Worksheets("Variáveis").Cells(1, 1).Value 'Old file path ' Comunicação com Apen Dynamic Set ACMobj = GetObject(File) ACMobj.Application.Visible = True ' Número do caso: NSteptest = 1 ' Nome da Planilha GetDataName = "StepTest" 'Chama a função que iniciao Aspen Call CBRunAspenStepTest ' Escreve o tipo de variável que será realizado o degrau NvarControl = 1 numlist1 = 1 VarNameProces = Worksheets("Variáveis").Cells(3, 2).Value ' Busca o nome da variável a ser aplicada o Degrau VarName = Worksheets("Variáveis").Cells(3, 6).Value Variablename = Worksheets("Variáveis").Cells(3, 6).Value ' Número de pontos a serem mostrados no graáfico: pont = 20 ' Obtem o valor corrente da variável de processo: ReDim PVV(pont) ReDim MVV(pont) ReDim TIMEV(pont) ' Status de simulação do Aspen Dynamics RunStatus = 1 ' 1 Running, 0 Stoped ' Index de inicio de armazenamento de dados na planilha Index1 = 2 ' Define o passo de captura de dados Pausetime = Worksheets("StepTest").Cells(2, 7).Value ' Fixa o inicio da aplicação do degrau TimeStep = CDbl(Worksheets("StepTest").Cells(2, 7).Value) ' Obtem o valor corrente na planilha oculta e adiciona um degrau ' Especifica o número do caso: NumberCase = GetDataName ' Inicia a criação de gráficos: CriarGraficos = "True" If CriarGraficos = "True" Then Call CriarGrafico(CriarGraficos) End If ' Variáveis resposta ' Estratégia: ler o valor corrente da variável na planilha oculta e reescrever na coluna: ' Escreve os parâmetros variáveis controladas NvarManip = 1 Ntypevar1 = 1 ' Status inical para o step e finalizar: não StatusStep = 0 50 StatusStop = 0 StatusCalcPar = 0 StatusUpdatePar = 0 'Contadores iniciais ix = 1 ' Contodor primario para matrizes '==================================================== ' Loop de cauptura de dados das variáveis controladas GoToStartstep: ' Ler e armazena os valores das variáveis: If ix <= pont Then TIMEV(ix) = ACMobj.Application.Simulation.Time Worksheets("StepTest").Cells(5, 7).Value = TIMEV(ix) PVV(ix) = Worksheets("Variáveis").Cells(3, 3).Value PVSPV = Worksheets("Variáveis").Cells(4, 3).Value MVV(ix) = Worksheets("Variáveis").Cells(3, 7).Value Else TIMEV(ix - 1) = ACMobj.Application.Simulation.Time Worksheets("StepTest").Cells(5, 7).Value = TIMEV(ix - 1) PVV(ix - 1) = Worksheets("Variáveis").Cells(3, 3).Value PVSPV = Worksheets("Variáveis").Cells(4, 3).Value MVV(ix - 1) = Worksheets("Variáveis").Cells(3, 7).Value End If If ix <= pont Then ' Continua armazenando For i = 1 To ix Worksheets("StepTest").Cells(i + 1, 1).Value = TIMEV(i) Worksheets("StepTest").Cells(i + 1, 2).Value = PVV(i) Worksheets("StepTest").Cells(i + 1, 4).Value = MVV(i) Next i ix = ix + 1 Else ' Inicia identificação ix = pont + 1 ' Variáveis auxiliares para as variáveis Dim PVaux() As Double, MVaux() As Double, TIMEaux() As Double PVaux = PVV MVaux = MVV TIMEaux = TIMEV 'Inseri um passo no histórico das variáveis: For i = 1 To pont - 1 '-----------------------PVV(i) = PVaux(i + 1) MVV(i) = MVaux(i + 1) TIMEV(i) = TIMEaux(i + 1) Next i ' Inserindo dados na Planilha: For i = 1 To ix - 1 Worksheets("StepTest").Cells(i + 1, 1).Value = TIMEV(i) Worksheets("StepTest").Cells(i + 1, 2).Value = PVV(i) Worksheets("StepTest").Cells(i + 1, 4).Value = MVV(i) Next i End If If StatusStep = 1 Then ' Aplica um degrau na variável StepTest Worksheets("StepTest").Cells(2, 10).Value = "='Aspen Dynamics Language'|'" & File & " '!'\ " & VarNameProces & ".Value'" Worksheets("StepTest").Cells(3, 10).Value = "='Aspen Dynamics Language'|'" & File & " '!'\ " & Variablename & ".Value'" 51 StepDegrau = (1 + CDbl(Worksheets("StepTest").Cells(6, 7).Value) (CDbl(Worksheets("StepTest").Cells(3, 10).Value)) ' ---- Cálculo do degrau ----------------------DeltaMV = (CDbl(Worksheets("StepTest").Cells(6, 7).Value) / (CDbl(Worksheets("StepTest").Cells(3, 10).Value)) / 100) 100) ' Obtem o endereço do arquivo armazenado na planilha File2 = Worksheets("Variáveis").Cells(1, 1).Value 'Old file path ' Obtendo o nome do controlador: NomeControle = Worksheets("Variáveis").Cells(4, 2).Value Value = Split(NomeControle, ".") NomeControle = Value(0) ' SetPoint inicial: ' Contador inicial para os vetores que armazenam os dados TIME e PV ContVTPV = 0 InitialSP = Worksheets("StepTest").Cells(4, 10).Value ' Comunicação com Apen Dynamic Set ACMObj2 = GetObject(File2) ACMObj2.Application.Visible = True ' Inseri uma pausa ACMObj2.pause ' Habilita a seleção free para as variáveis: ACMObj2.Application.Simulation.Flowsheet.Resolve(NomeControle & ".AutoMan").Spec = "Free" ' Coloca o controlador em manual: ACMObj2.Application.Simulation.Flowsheet.Resolve(NomeControle & ".AutoMan").Value = 1 ' Desabilita a seleção free para as variáveis: ACMObj2.Application.Simulation.Flowsheet.Resolve(NomeControle & ".AutoMan").Spec = "Fixed" ' Inseri uma pausa ACMObj2.Application.Simulation.Flowsheet.Resolve(NomeControle & ".OPMan").Spec = "Free" ACMObj2.Application.Simulation.Flowsheet.Resolve(NomeControle & ".OPMan").Value = StepDegrau ACMObj2.Application.Simulation.Flowsheet.Resolve(NomeControle & ".OPMan").Spec = "Initial" ' Reativa simulação: ACMObj2.Application.Simulation.runmode = "Dynamic" On Error Resume Next ' Pula o erro se o Aspen estiver rodando ACMObj2.Run (False) ' Valor inicial de tempo e variável PV InitialTime = CDbl(Worksheets("StepTest").Cells(5, 7).Value) InitialValuePV = CDbl(Worksheets("StepTest").Cells(2, 10).Value) InitialValueMV = CDbl(Worksheets("StepTest").Cells(3, 10).Value) ' Index de inicio de armazenamento de dados na planilha Index1 = 2 ' Armazena os valores a partir da célula 2 ReDim Vtime(ContVTPV + 1) ReDim VPV(ContVTPV + 1) Vtime(ContVTPV) = InitialTime VPV(ContVTPV) = InitialValuePV '-------------------' Desabilita a aplicação degrau StatusStep = 0 End If '------------------------------' Realiza o step test If StatusStepON = 1 Then '-----------------------------' Variável a ser aplicada o step CurrenceTime = CDbl(Worksheets("StepTest").Cells(5, 7).Value) CurrenceValuePV = CDbl(Worksheets("StepTest").Cells(2, 10).Value) CurrenceValueMV = Worksheets("StepTest").Cells(3, 10).Value VarName = Worksheets("StepTest").Cells(3, 9) 'Coluna time * * 52 Worksheets("StepTest").Cells(1, 2).Value = "Time,min" Vtime(ContVTPV) = CurrenceTime ' Variáveis resposta VPV(ContVTPV) = CurrenceValuePV VMV(ContVTPV) = CurrenceValueMV '---------' Atualiza os vetores: ReDim Preserve Vtime(ContVTPV + 1) ReDim Preserve VPV(ContVTPV + 1) ReDim Preserve VMV(ContVTPV + 1) ContVTPV = ContVTPV + 1 Index1 = Index1 + 1 End If ' Escreve os dados na Planilha durante tempo de simulção especificado Start = Timer ' Set start time. Do While Timer < Start + CDbl(Pausetime) DoEvents ' Yield to other processes. Loop ' Coluna time Worksheets(GetDataName).Cells(1, 1).Value = "Time,hr" Worksheets(GetDataName).Cells(ix, 1).Value = ACMobj.Application.Simulation.Time ' Escreve o valor corrente da PV ' Reescreve o valor corrente na planilha de casos Worksheets(GetDataName).Cells(ix, 2).Value = Worksheets("StepTest").Cells(2, 10).Value ' Reescreve o valor corrente na planilha de casos Worksheets(GetDataName).Cells(ix, 4).Value = Worksheets("StepTest").Cells(3, 10).Value ' Chama a função que atualiza o gráfico: ' Cria os gráficos a primeira vez: If CriarGraficos = "True" Then Call CriarGrafico(CriarGraficos) Else Call AtualizarGrafico ' Associa a qtde de dados Lastline = (Sheets(NumberCase).Range("B" & Rows.Count).End(xlUp).Row) - 1 Worksheets(NumberCase).Cells(4, 7).Value = Lastline End If If StatusStop = 1 Then ' Comunicação com Aspen Dynamics Set ACMObj2 = GetObject(File2) ACMObj2.Application.Visible = True ' Inseri uma pausa ACMObj2.pause ' Habilita a seleção free para as variáveis: ACMObj2.Application.Simulation.Flowsheet.Resolve(NomeControle & ".AutoMan").Spec = "Free" ' Coloca o controlador em manual: ACMObj2.Application.Simulation.Flowsheet.Resolve(NomeControle & ".AutoMan").Value = 0 ' Desabilita a seleção free para as variáveis: ACMObj2.Application.Simulation.Flowsheet.Resolve(NomeControle & ".AutoMan").Spec = "Fixed" 'Inseri o valor anterior do SetPoint: ' Habilita a seleção free para as variáveis: ACMObj2.Application.Simulation.Flowsheet.Resolve(NomeControle & ".SP").Spec = "Free" ' Coloca o controlador em manual: ACMObj2.Application.Simulation.Flowsheet.Resolve(NomeControle & ".SP").Value = InitialSP ' Desabilita a seleção free para as variáveis: ACMObj2.Application.Simulation.Flowsheet.Resolve(NomeControle & ".SP").Spec = "Initial" ' Reativa simulação: ACMObj2.Application.Simulation.runmode = "Dynamic" On Error Resume Next ' Pula o erro se o Aspen estiver rodando ACMObj2.Run (False) StatusStop = 0 53 ' Chama a função CalcLoopCharac NCIndex = 1 Call CalcLoopCharac(NCIndex, StepDegrau, ContVTPV, Vtime, VPV, InitialValuePV, DeltaMV) End If ' Verifica a opção de calculo dos paâmetros de sintonia: If StatusCalcPar = 1 Then Call CalcParametersTuning StatusCalcPar = 0 End If ' Verifica a opção de atualização dos parâmetros de sintonia If StatusUpdatePar = 1 Then Call AtualizarParametros StatusUpdatePar = 0 End If ' Veirifação de condição de retorno If RunStatus = 1 Then GoTo GoToStartstep Else ' Atualiza os casos na CBNCases 'Call CBNCase_atualize End If End Sub Private Sub CBRunAspenStepTest() Dim File As String Dim ACMobj As Object File = Worksheets("Variáveis").Cells(1, 1).Value 'Old file path ' Comunicação com Aspen Dynamic Set ACMobj = GetObject(File) ACMobj.Application.Visible = True ACMobj.Application.Simulation.runmode = "Dynamic" On Error Resume Next ' In case we are already running ACMobj.Run (False) End Sub '=========================================== Sub CalcParametersTuning() '------------------------Dim ControlType As String, ControlType1 Dim ControlMethod As String Dim TuningAction As String Dim TuningGain As Double Dim TuningTI As Double Dim TiningTD As Double Dim KP As Double, Theta As Double, talp As Double Dim KC As Double, TI As Double, TD As Double Dim LHIIN As Double, LLOIN As Double, LHIOUT As Double, LLOOUT As Double Dim lambda As Double Dim iRet As Integer Dim strPrompt As String Dim strTitle As String '-----------------------ControlType1 = Worksheets("StepTest").Cells(9, 13).Value ' ControlType: ' 1 = -- Controlador -' 2 = Controller -P ' 3 = Controller -PI ' 4 = Controller -PID 54 If ControlType1 = "1" Then ' Prompt strPrompt = "Por favor, selecione o tipo de controlador." ' Dialog's Title strTitle = "Controlador" 'Display MessageBox iRet = MsgBox(strPrompt, vbYes, strTitle) GoTo AbortCalcTuning End If '---------------------Select Case ControlType1 Case 1 ControlType = "-- Controlador --" Case 2 ControlType = "Controller - P" Case 3 ControlType = "Controller - PI" Case Else ControlType = "Controller - PID" End Select ControlMethod1 = Worksheets("StepTest").Cells(11, 13) '-- Méthodo -'Ziegler -Nichols 'Cohen -Coon 'IMC If ControlMethod1 = "1" Then ' Prompt strPrompt = "Por favor, selecione o método de sintonia." ' Dialog's Title strTitle = "Tipo de controlador" 'Display MessageBox iRet = MsgBox(strPrompt, vbYes, strTitle) GoTo AbortCalcTuning End If If ControlMethod1 = "1" Then GoTo AbortCalcTuning End If Select Case ControlMethod1 Case 1 ControlMethod = "-- Méthodo --" Case 2 ControlMethod = "Ziegler-Nichols" Case 3 ControlMethod = "Cohen-Coon" Case 4 ControlMethod = "CHR" Case Else ControlMethod = "IMC" End Select KP = CDbl(Sheets("POSolver").Range("h1").Value) / CDbl(Sheets("POSolver").Range("h2").Value) 'Unit/Unit talp = CDbl(Sheets("POSolver").Range("h3").Value) Theta = CDbl(Sheets("POSolver").Range("h4").Value) '--------------------------------------If KP < 0 Then Worksheets("StepTest").Cells(9, 16) = "Reverse" Else Worksheets("StepTest").Cells(9, 16) = "Direct" End If 55 '---------------------------------------If ControlMethod = "Ziegler-Nichols" Then ' Controlador PID If ControlType = "Controller - PID" Then If Theta < 0.01 Then Theta = 0.01 End If If KP < 0 Then KP = -KP End If KC = 1.2 * (talp / (KP * Theta)) TI = 2 * Theta TD = 0.5 * Theta End If End If '-----------------------------If ControlMethod = "Cohen-Coon" Then ' Controlador PID If ControlType = "Controller - PID" Then If Theta < 0.01 Then Theta = 0.01 End If If KP < 0 Then KP = -KP End If KC = 1.35 * (talp / (KP * Theta)) + 0.25 / KP TI = Theta * ((0.35 + 0.25 * (Theta / talp)) / (1.54 + 0.33 * (Theta / talp))) TD = ((0.5 * Theta) / (1.35 + 0.25 * (Theta / talp))) End If End If '-------------------If ControlMethod = "CHR" Then ' Controlador PID If ControlType = "Controller - PID" Then If Theta < 0.01 Then Theta = 0.01 End If If KP < 0 Then KP = -KP End If KC = 0.95 * (talp / (KP * Theta)) TI = 1.357 * talp TD = 0.473 * Theta End If End If ' Saída de dados: ' Limites PV LHIIN = Worksheets("StepTest").Cells(6, 12).Value LLOIN = Worksheets("StepTest").Cells(7, 12).Value ' Limites OP LHIOUT = Worksheets("StepTest").Cells(6, 10).Value LLOOUT = Worksheets("StepTest").Cells(7, 10).Value 'With BRSCform1 ' Format(CurrenceValuePV, "0.0000") Worksheets("StepTest").Cells(10, 16) = KC '* ((CDbl(LHIIN) - CDbl(LLOIN)) / (CDbl(LHIOUT) CDbl(LLOOUT))) Worksheets("StepTest").Cells(11, 16) = TI * 60 Worksheets("StepTest").Cells(12, 16) = TD * 60 AbortCalcTuning: End Sub 56 '=========================================== 'sub Calculo LoopCharacteristic Sub CalcLoopCharac(NCIndex, StepDegrau, ContVTPV, Vtime, VPV, InitialValuePV, DeltaMV) Dim GetDataNameSolver As String Dim Q11 As String Dim NpSol As Long, nPOcultaSol As Long Dim LHIIN As Double, LHIOUT As Double Dim LLOIN As Double, LLOOUT As Double ' ------------------------------------GetDataNameSolver = "POSolver" ' Verifica se a planilha PlanOculta foi criada For NpSol = 1 To (Sheets.Count) If Sheets(NpSol).Name = GetDataNameSolver Then Q11 = "true" nPOcultaSol = nPOcultaSol + 1 End If Next NpSol '============================================ If Q11 = "true" Then 'Apaga Application.DisplayAlerts = False Sheets(GetDataNameSolver).Delete Application.DisplayAlerts = True '========================================= 'Cria uma planilha oculta Sheets.Add After:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = GetDataNameSolver 'Oculta a planilha 'Sheets(GetDataNameSolver).Visible = False 'Sheets(1).Select '========================================= Else '========================================= 'Cria uma planilha oculta Sheets.Add After:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = GetDataNameSolver 'Oculta a planilha Sheets(GetDataNameSolver).Visible = False 'Sheets(1).Select '========================================= End If nPOcultaSol = 1 For NpSol = 1 To (Sheets.Count) If Sheets(NpSol).Name = GetDataNameSolver Then Exit For End If nPOcultaSol = nPOcultaSol + 1 Next NpSol '----------------------------------------' Escrevendo os dados na Planilha: For i = 0 To ContVTPV - 1 Sheets(nPOcultaSol).Cells(i + 1, 1).Value = Vtime(i) - Vtime(0) Sheets(nPOcultaSol).Cells(i + 1, 2).Value = VPV(i) - VPV(0) Next i If StepDegrau = 0 Then StepDegrau = 0.00000001 End If 'K Sheets(nPOcultaSol).Range("g1") = "Kc =" 57 Sheets(nPOcultaSol).Range("h1").Value = CDbl(VPV(ContVTPV - 1) - VPV(0)) 'Unit ' Du Sheets(nPOcultaSol).Range("g2") = "DMV =" Sheets(nPOcultaSol).Range("h2").Value = DeltaMV 'Unit ' Estimativas iniciais de tal e theta ' tal Sheets(nPOcultaSol).Range("g3") = "tal =" Sheets(nPOcultaSol).Range("h3").Value = "1" ' theta Sheets(nPOcultaSol).Range("g4") = "Theta =" Sheets(nPOcultaSol).Range("h4").Value = "1" ' calculando o modelo de 1a ordem Dim Kpv As Double Dim tal As Double Dim Theta As Double Dim Du As Double Kpv = CDbl(Sheets(nPOcultaSol).Range("h1").Value) Du = CDbl(Sheets(nPOcultaSol).Range("h2").Value) tal = CDbl(Sheets(nPOcultaSol).Range("h3").Value) Theta = CDbl(Sheets(nPOcultaSol).Range("h4").Value) For i = 1 To ContVTPV - 1 Sheets(nPOcultaSol).Cells(i, 3).Value = "=if(A" & i & ">= $h$4,$h$1*$h$2*(1 - Exp(-(A" & i & " - $h$4) / $h$3)),0)" Sheets(nPOcultaSol).Cells(i, 4).Value = "=(B" & i & "- C" & i & ")^ 2" Next i ' Soma dos quadrados (yexp - yteor)^2 Sheets(nPOcultaSol).Cells(1, 5) = "=SUM(D1:D" & ContVTPV - 1 & ")" Sheets(nPOcultaSol).Visible = True Sheets(nPOcultaSol).Select ' Habilitando solver: Call SolverCalc Sheets(nPOcultaSol).Visible = False ' ------------------------------------' Limites MV LHIIN = Worksheets("StepTest").Cells(6, 12).Value LLOIN = Worksheets("StepTest").Cells(7, 12).Value ' Limites OP LHIOUT = Worksheets("StepTest").Cells(6, 10).Value LLOOUT = Worksheets("StepTest").Cells(7, 10).Value ' Calcula os valores do Ganho ' ------------------------------------Worksheets("StepTest").Cells(2, 14).Value = (((VPV(ContVTPV - 1) - VPV(0)) / DeltaMV)) * ((LHIIN LLOIN) / (LHIOUT - LLOOUT)) ' ---- = K(unit/unit) ---> K(%/%) Worksheets("StepTest").Cells(3, 14).Value = (((VPV(ContVTPV - 1) - VPV(0)) / DeltaMV)) ' ---- = K(unit/unit) 'Format(((CDbl(Sheets(nPOculta).Range("h1").value) + VPV(0) - CDbl(.LLOIN)) / (CDbl(.LHIIN) CDbl(.LLOIN))) / ((DStepDegrau - CDbl(.LLOOUT)) / (CDbl(.LHIOUT) - CDbl(.LLOOUT))), "0.0000") Worksheets("StepTest").Cells(4, 14).Value = CDbl(Sheets(nPOcultaSol).Range("h3").Value) Worksheets("StepTest").Cells(5, 14).Value = CDbl(Sheets(nPOcultaSol).Range("h4").Value) ' Escrevendo a curva teórica e a experimental Lastline = (Sheets("StepTest").Range("Q" & Rows.Count).End(xlUp).Row) - 1 If Lastline = 0 Then Lastline = 1 End If Worksheets("StepTest").Range("Q2:T" & Lastline + 1).Clear Worksheets("StepTest").Range("V2:V" & Lastline + 1).Clear 58 For i = 1 To ContVTPV - 1 Worksheets("StepTest").Cells(i + 1, 17).Value = Sheets(nPOcultaSol).Cells(i, 1).Value Worksheets("StepTest").Cells(i + 1, 18).Value = Sheets(nPOcultaSol).Cells(i, 2).Value Worksheets("StepTest").Cells(i + 1, 19).Value = Sheets(nPOcultaSol).Cells(i, 3).Value Worksheets("StepTest").Cells(i + 1, 20).Value = Sheets(nPOcultaSol).Cells(i, 4).Value Next i '----------------- Cálculo do fator de ajuste: r² = (1-Soma(yexp-yteo)²/soma(yexp-ymediateo)²) ' Calculo da média dos dados teóricos: Worksheets("StepTest").Cells(2, 21) = "=MEDIAN(s2:s" & ContVTPV & ")" ' calculo das somas: For i = 1 To ContVTPV - 1 Worksheets("StepTest").Cells(i + 1, 22) = "=(R" & i + 1 & "- U2)^ 2" Next i ' Soma dos quadrados (yexp - yteor)^2 Worksheets("StepTest").Cells(4, 21).Value = "=SUM(T2:T" & ContVTPV & ")" ' Soma dos quadrados (yexp - yteor)^2 Worksheets("StepTest").Cells(6, 21).Value = "=SUM(V2:V" & ContVTPV & ")" ' Valor de R² Worksheets("StepTest").Cells(7, 14).Value = "=(1-U4/U6)" Worksheets("StepTest").Cells(7, 14).Value = Format(Worksheets("StepTest").Cells(7, 14).Value, "0.0000") '------- Gráfico:----End Sub Sub SolverCalc() 'Call SolverInstall Application.Run "SolverReset" Application.Run "SolverOk", "$E$1", 2, "0", "$H$3:$H$4" Application.Run "SolverAdd", "$H$3", 3, "0.0000000001" Application.Run "SolverOk", "$E$1", 2, "0", "$H$3:$H$4" Application.Run "SolverAdd", "$H$4", 3, "0.01" '"0.0000000001" Application.Run "SolverOk", "$E$1", 2, "0", "$H$3:$H$4" Application.Run "SolverSolve", True End Sub '------------------Sub SolverInstall() On Error Resume Next Dim wb As Workbook Dim SolverPath As String ' Set a Reference to the workbook that will hold Solver Set wb = ActiveWorkbook SolverPath = Application.LibraryPath & "\SOLVER\SOLVER.XLAM" With AddIns("Solver Add-In") .Installed = False .Installed = True End With End Sub