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  an1 s n1  ...  a0 s 0  s

e , mn
X ( s) bm s m  bm1 s m1  ...  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