Baixe o app para aproveitar ainda mais
Prévia do material em texto
UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO Curso de Engenharia Química - CAMPUS DE ALEGRE – AULAS PRÁTICAS EM PYTHON CONTROLE DE PROCESSOS PROFESSOR JULIO CESAR SAMPAIO DUTRA Graduação em Engenharia Química – UFRRJ Doutorado em Engenharia Química – COPPE / UFRJ e-mail: julio.dutra@ufes.br ALEGRE – ES 2020/2 ENG-10933 Controle de Processos ⋅ EQ/UFES (Campus de Alegre) Prof. Julio Dutra 2 Introdução Com o objetivo de aplicar os conceitos da disciplina de Controle de Processos, é proposta a realização de uma série de atividades aplicadas a exemplos da Engenharia Química ou de áreas afins. Isto é feito no intuito de desenvolver habilidades computacionais essenciais para o uso de software de computador para ajudar a descrever e projetar sistemas de controle, importantes também para as áreas de modelagem e simulação. A partir da literatura, será selecionado um exemplo com modelagem matemática fenomenológica com dinâmica no tempo, bem como o conjunto de parâmetros necessários para a simulação. Para não elevar a complexidade de implementação computacional dos modelos, será escolhido um modelo com parâmetros concentrados. Uma cópia do trabalho selecionado será compartilhada na sala virtual. No contexto de ensino-aprendizagem remoto emergencial (EARTE), o desenvolvimento das atividades práticas da disciplina poderá ser executado em grupos, cujos resultados serão entregues por escrito na forma de um relatório. Serão trabalhadas as seguintes atividades: a) Implementação de modelo matemático b) Linearização do modelo não lineares c) Obtenção de funções de transferência d) Análise do processo (ordem, polos, zeros, ...) e) Projeto de controladores e sintonia f) Simulação computacional em malha fechada, com testes regulador e servo Esses conteúdos serão desenvolvidos em Python. Esta linguagem de programação ganhou notoriedade na área de Ciência de Dados, mas também tem tido preferência como plataforma de solução de problemas de engenharia. Existem diversas opções de ambientes para desenvolvimento em Python, sendo que a plataforma mais popular hoje é a Anaconda. Ela contém ferramentas importantes como o Spyder (que é um ambiente para programar em Python), além de um conjunto enorme de pacotes populares já instalados (numpy, scipy, matlibplot, etc). Por isso, é necessário que os alunos façam o download da plataforma Anaconda em seus computadores a partir do site www.anaconda.com/, e procedam a instalação que é muito simples. ENG-10933 Controle de Processos ⋅ EQ/UFES (Campus de Alegre) Prof. Julio Dutra 3 Simulação de um sistema de EDO Os modelos matemáticos representam uma aproximação de mundo do real. No caso de processos químicos, eles podem auxiliar em diversas tarefas do engenheiro, como projetar equipamentos, determinar a condição operacional ótima, analisar o comportamento dinâmico e propor estratégias de controle. Para isso, uma etapa fundamental é a simulação dos modelos com o auxílio do computador. Dada a diversidade da natureza matemática dos modelos, existem muitas técnicas numéricas para a resolução das equações. Aqui, será considerada apenas a integração numérica de um sistema de equações diferenciais ordinárias (EDO) de primeira ordem, em que a variável independente é o tempo: 𝑑𝒙 𝑑𝑡 = 𝒇(𝑡, 𝒙, 𝒖), 𝒙(𝑡 ) = 𝒙 em que 𝒇() representa um sistema de equações; 𝑡, a variável independente tempo; 𝒙, o vetor de variáveis dependentes ou de estado com a condição inicial 𝒙 em 𝑡 = 𝑡 ; e 𝒖, o vetor de variáveis de entrada. Muitos problemas dinâmicos podem ser representados por este tipo de equação, como aqueles que envolvem tanques de mistura e reatores (batelada e tipo tanque agitado). De qualquer forma, equações de ordem superior podem ser reescritas na forma acima e sistemas de equações diferenciais parciais (EDP) podem ser transformados em um sistema de EDO, por exemplo, aplicando-se diferenças finitas. A solução deste tipo de problema no Python, pode ser feita em duas partes: A primeira é a implementação de uma função com as equações 𝒇(𝑡, 𝒙, 𝒖), que aceita a variável independente, as variáveis dependentes e quaisquer parâmetros necessários e retorna os valores das derivadas 𝑑𝒙/𝑑𝑡 das variáveis dependentes. A segunda parte integra a função com o integrador solve_ivp da biblioteca SciPy (scipy.integrate) para calcular soluções das variáveis dependentes em um intervalo de tempo especificado, assumindo as condições iniciais fornecidas. Assim, a partir da condição inicial 𝒙(𝑡 ) = 𝒙 , é possível conhecer o comportamento dinâmico das variáveis de estado 𝒙(𝑡) ∀ 𝑡 > 𝑡 , considerando diferentes valores para a variáveis de entrada. É possível conhecer o perfil de resposta, a iteração entres a variáveis, o estado estacionário, sensibilidade das variáveis, o grau de não linearidade, entre outros. ENG-10933 Controle de Processos ⋅ EQ/UFES (Campus de Alegre) Prof. Julio Dutra 4 Exemplo de aplicação Considere o problema de um processo químico dado por um reator CSTR não adiabático encamisado, onde ocorre a reação A → B de 1ª ordem (Seborg et al., 2011). Há 2 variáveis de estado: a concentração de reagente (𝑐 ) e a temperatura do reator (𝑇). As variáveis de entrada são: a vazão e concentração de alimentação de reagente (𝑞 e 𝑐 ), mais a temperatura do refrigerante (𝑇 ). 𝑉 𝑑𝑐 𝑑𝑡 = 𝑞(𝑐 − 𝑐 ) − 𝑉𝑘𝑐 𝑘 = 𝑘 𝑒 / 𝑉𝜌𝑐 𝑑𝑇 𝑑𝑡 = 𝑞𝜌𝑐 (𝑇 − 𝑇) + (−Δ𝐻 )𝑉𝑘𝑐 − 𝑈𝐴(𝑇 − 𝑇 ) A entrada está a temperatura 𝑇 ; e a corrente de produto flui a vazão 𝑞, com concentração 𝑐 e temperatura 𝑇. Os demais parâmetros do problema constantes são: volume 𝑉, calor específico (𝑐 ), densidade (𝜌), entalpia Δ𝐻 , e coeficiente de troca térmica 𝑈𝐴. Os valores dos parâmetros e condição inicial das variáveis podem vistos abaixo Parâmetros e condições nominais operacionais para o CSTR (Seborg et al., 2011). Parâmetro Valor Parâmetro Valor Variáveis Valor 𝑉 100 L −Δ𝐻 5×104 J/mol 𝑐 (0) 0.5 mol/L 𝜌 1000 g/L 𝑘 7.2×1010 min-1 𝑇(0) 350 K 𝑐 0.239 J/(g∙K) 𝐸 72747.5 J/mol 𝑞(0) 100 L/min 𝑇 350 K 𝑅 8.314 J/(mol∙K) 𝑐 (0) 1 mol/L 𝑈𝐴 5×104 J/(min∙K) 𝑇 (0) 300 K Implemente o modelo no Python. Faça algumas simulações variando as condições operacionais das variáveis de entrada, usando testes do tipo 𝑇 + 10K e 𝑇 − 10K. Verifique os resultados em saídas gráficas, como a mostrada aqui abaixo. ENG-10933 Controle de Processos ⋅ EQ/UFES (Campus de Alegre) Prof. Julio Dutra 5 Implementação no Python A solução mostrada abaixo, embora dividida em 3 seções para melhor compreensão, forma um código único a ser digitado por vocês no editor do Python no Spyder. 1. Importação de bibliotecas e definição do modelo do processo # -*- coding: utf-8 -*- """ Created on Mon Feb 8 18:17:07 2021 @author: Julio Dutra """ #%% importar biblotecas import numpy as np import matplotlib.pyplot as plt from scipy.integrate import solve_ivp #%% definir modelo do processo def reator_CSTR(t,x,u): '''modelo do reator CSTR''' # parametros do modelo V = 100.0 rho = 1000.0 cp = 0.239 DH = -5e4 k0 = 7.2e10 E = 72747.5 R = 8.314 Ti = 350.0 UA = 5e4 # variáveis de estado cA = x[0] T = x[1] # variáveis de entrada q = u[0] cAi = u[1] Tc = u[2] # equações constitutivas k = k0*np.exp(-E/(R*T)) Q = UA*(T-Tc) rA = k*cA # equações do modelo dcA = q/V*(cAi-cA) - rA dT = (q*rho*cp*(Ti-T)+(-DH)*rA*V - Q)/(V*rho*cp) # saida do modelo dx = [dcA, dT] return dx ENG-10933 Controle de Processos ⋅ EQ/UFES (Campus de Alegre) Prof. Julio Dutra 6 2. Integração do modelo usando a função solve_ivp #%% Integração do modelo # intervalode integração tspan = [0, 10.0] # [t_inicial, t_final] # condição inicial x0 = [0.5, 350.] # cA0, T0 u0 = [100.0, 1.0, 300.0] # q0, cAi0, Tc0 # testes de variação nas entradas u0[0] = u0[0] - 0.0 # q u0[1] = u0[1] - 0.0 # cAi u0[2] = u0[2] - 0.0 # Tc # Instanciar o modelo modelo = lambda t,x: reator_CSTR(t, x, u0) # solver: integrador sol = solve_ivp(modelo, tspan, x0, method='BDF') # resultado t = sol.t # tempo x = sol.y; # cA, T 3. Geração das saídas gráficas #%% saídas gráficas plt.close('all') # Instanciar uma figura plt.figure(1,figsize=[14,5]) plt.subplot(1,3,1) plt.plot(t,x[1,:], 'r-', lw=5) plt.ylabel('Temperatura do reator, oC', fontsize=14) plt.xlabel('Tempo, min', fontsize=14) plt.axis([0, 10, 300, 450]) plt.xticks(range(0,11)) plt.yticks(range(300,500,50)) plt.subplot(1,3,2) plt.plot(t,x[0,:],'b-', lw=5) plt.ylabel('Concentração de reagente, mol/L', fontsize=14) plt.xlabel('Tempo, min', fontsize=14) plt.axis([0, 10, 0, 1]) plt.xticks(range(0,11)) plt.yticks(np.arange(0,1.1,0.1)) plt.subplot(1,3,3) plt.plot(x[0,:],x[1,:], 'k-') plt.ylabel('Temperatura do reator, oC', fontsize=14) plt.xlabel('Concentração de reagente, mol/L', fontsize=14) plt.title('Plano de fases: cA x T', fontweight='bold') ENG-10933 Controle de Processos ⋅ EQ/UFES (Campus de Alegre) Prof. Julio Dutra 7 # Ajustar o preenchimento entre os subplots plt.tight_layout() plt.show() # salvar uma figura (extensão pode ser pdf, jpg, ...) plt.savefig('aula01_model_implementation.tif') Estudo proposto: Considere um tanque de mistura, onde se dilui uma corrente contendo um ácido X usando água como solvente. O processo contém 2 variáveis de estado: o nível da mistura (ℎ) e a concentração do ácido dentro tanque (𝑐 ); 3 variáveis de entrada: a concentração de alimentação do ácido (𝑐 ) e as vazões de alimentação de água e de ácido (𝑞 e 𝑞 ). Modelo matemático Condições nominais Nível: 𝑑ℎ/𝑑𝑡 = 𝑞 + 𝑞 − 2.5√ℎ Variáveis de entrada (𝒖 ): 𝑞 = 1.5 𝑞 = 1.0 𝑐 = 3.0 Variáveis de estado (𝒙 ): ℎ = 1.0 𝑐 = 1.2 Concentração: 𝑑𝑐 /𝑑𝑡 = (1/ℎ)[𝑞 (𝑐 − 𝑐 ) − 𝑞 𝑐 ] Implemente o modelo deste tanque no Python. Faça algumas simulações relacionando o perfil dinâmico das variáveis de estado com mudanças do tipo degrau nas variáveis de entrada. Verifique a consistência dos resultados em saídas gráficas. Anotações:
Compartilhar