250 likes | 398 Views
Sistemas não-lineares no Simulink. Simulando um CSTR. Entradas: F i , T i ,T C ,F , C i A. Simulando um CSTR. Para construir o diagrama Simulink deste modelo, além dos blocos já utilizados, serão necessários os seguintes:
E N D
Simulando um CSTR Entradas: F i,T i,TC ,F , C iA
Simulando um CSTR • Para construir o diagrama Simulink deste modelo, além dos blocos já utilizados, serão necessários os seguintes: • Simulink/Signals & Systems/Mux: concatena (ou “empilha”) escalares em um vetor (ou vetores em um vetor maior) • Simulink/Signals & Systems/Demux: extrai (ou “desempilha”) constantes de um vetor (ou vetores de um vetor maior) • Simulink/Continuous/Transport Delay: aplica um atraso a uma entrada • Simulink/Functions & Tables/S-Function: executa uma função de usuário, escrita em código-M, de acordo com as regras para criação de S-Functions
Simulando um CSTR O diagrama do modelo do CSTR encontra-se abaixo.
Simulando um CSTR O bloco Mux (u) do modelo concatena as 5 entradas em um vetor de 5 elementos.
Simulando um CSTR O bloco Demux (Saída) extrai do vetor que recebe da função-S as saídas do modelo.
Simulando um CSTR O bloco Transport Delay aplica um atraso na entrada que recebe. Para configurá-lo, basta informar (i) o valor do (tempo de) atraso (Time Delay) e (ii) o valor inicial da saída do bloco, ou seja, o valor que o bloco Transport Delay irá gerar, até que o tempo de simulação iguale o atraso (Initial input).
Simulando um CSTR O que há de diferente neste modelo é a não linearidade que requer a função-S (reator.m), que trabalha diretamente com as equações diferenciais do CSTR.
Simulando um CSTR É preciso seguir algumas regras específicas das funções-S. Quando usamos “solvers” do MATLAB programas para integrar ODE’s usamos sintaxes (dentro do programa principal) do tipo ... [T, Y] = ode45(‘arq’,TEMPO,Y0,[],PAR1,...,PARN) ... A função “arq” calcula as derivadas com a seguinte sintaxe: function saida = arq(t,y,flag,PAR1,...,PARN) onde o vetor vazio ([]) na chamada a ode45 é um marcador de lugar para o vetor de opções, que não está sendo alterado desta forma (i.e.: defaults do MATLAB são assumidos.
Simulando um CSTR No caso do Simulink, você não escreverá a chamada a ode45, precisando se importar apenas com a declaração da função que calcula as derivadas e com as regras de chamada desta função. Esta função não apenas calculará as derivadas do modelo, como também irá informar ao integrador as condições iniciais. Uma função-S deve ser declarada da seguinte forma: function [sys, x0] = model(t,x,u,flag,PAR1,...,PARN)
Simulando um CSTR • Onde • sys é a saída de model, cujo significado depende de flag • x0 é o vetor de condições iniciais • t é o tempo de simulação • x é o vetor de estados do modelo • u é o vetor de entradas do modelo • flag é um parâmetro que informa a model o tipo de informação que o integrador espera receber • PAR1,...,PARN são os parâmetros adicionais que podem ser passados à função model
Simulando um CSTR Vamos agora tentar entender como funciona a simulação de um modelo usando uma função-S. Ao contrário do que acontecia com as funções de transferência, usando uma função-S, você pode trabalhar com valores absolutos das suas derivadas. Para isso, é preciso conhecer as condições iniciais da integração (o que não é pedido em nenhuma parte da configuração da simulação). Além disso, o Simulink precisa de informações sobre o modelo, se as variáveis são contínuas ou discretas, quantas entradas, saídas e estados o modelo possui, etc.
Simulando um CSTR Antes de começar a simulação, o Simulink instruirá o integrador a chamar a função model com um valor de flag igual a 0. Isso significa que model deve retornar em sys um vetor de configuração do modelo e em x0 o vetor de condições iniciais dos estados. Assim, para flag = 0, o vetor sys deve conter 6 elementos: sys = [ número de estados contínuos número de estados discretos número de saídas número de entradas marcador de alimentação direta tempo de amostragem ]
Simulando um CSTR Como nós sempre estaremos simulando modelos contínuos simples, apenas os elementos 1, 3 e 4 do vetor sys nos interessam. Os elementos referentes a modelos discretos e à alimentação direta de entradas devem ter valor zero. É preciso ter muito cuidado ao inicializar o modelo. Assegure-se que o número de entradas e saídas correpondem às entradas e saídas do diagrama do Simulink, e que todos os estados têm sua condição inicial corretamente atribuída no vetor x0.
Simulando um CSTR Ao longo da integração, o Simulinik instruirá o integrador a chamar model com vários valores de flag, dois dos quais de nosso interesse. Quando model for chamado com flag = 1, o integrador espera dele os valores das derivadas dos estados contínuos. Ou seja, para flag = 1, sys deve conter os valores das derivadas. ondições iniciais dos estados. Por fim, para flag = 3, o integrador espera em sys o valor das saídas. Nos casos de modelos simples (como o do CSTR), as saídas correspondem aos estados. Leia com atenção o código de reator.m, a seguir.
Simulando um CSTR function [sys,x0] = reator(t,x,u,flag,U,A,DeltaH,ro,Cp,E,R,k0) % % Simula um reator CSTR (mistura perfeita) no qual se conduz uma % reação exotérmica (A->B), resfriado por serpentina % % U = 150 BTU/(h.ft2.R), coeficiente de troca térmica % A = 250 ft2, área de troca térmica % DeltaH = -30000 BTU/lbm, calor de reação % ro = 50 lb/ft3, densidade % Cp = 0.75 BTU/(lbm.R), calor específico % E = 30000 BTU/lbm, energia de ativação % R = 1.99 BTU/(lbm.R), constante dos gases % k0 = 7.08e10 1/h, termo pré-exponencial da constante de reação % switch flag case 0 % Dimensiona o sistema e inicializa os estados % sys=[estados,0,saídas,entradas,0,0] sys = [3,0,3,5,0,0]; % Condições iniciais ca = 0.1315; %lbm/ft3, concentração inicial no reator T= 584.4115; %R, temperatura do reator V = 200; %ft3, volume do reator x0 = [ca T V]'; reator.m - 1ª parte
Simulando um CSTR case 1 % Calcula as derivadas % Atualiza entradas cai = u(1);%lbm/ft3, concentração da alimentação Fi = u(2);%ft3/hr, vazão de alimentação F = u(3);%vazão de retirada Tc = u(4); %R, temperatura do fluido de refrigeração Ti = u(5);%R, temperatura da alimentação % Cálculo das derivadas Ca = x(1); T = x(2); V = x(3); k = k0*exp(-E/(R*T)); dCa = (Fi*(cai-Ca)/V) - k*Ca; dV = Fi-F; dT = (Fi*Cp*ro*(Ti-T) + DeltaH*k*Ca*V - U*A*(T-Tc)) /(V*ro*Cp); sys = [dCa; dT; dV]; case 3 % Calcula as saídas sys = [x(1) x(2) x(3)]; otherwise sys = []; end reator.m - 2ª parte
Simulando um CSTR O código de reator.m introduz uma nova estrutura de controle de fluxo de execução, a estrutura CASO. A sintaxe da estrutura CASO é a seguinte: AVALIE expressão CASO valor 1 bloco de código 1 CASO 2 bloco de código 2 ... DE OUTRA FORMA bloco de código de tratamento de exceções FIM
Simulando um CSTR Em código M, esta sintaxe é escrita como abaixo: switch <expressão> case <valor 1> <bloco de código 1> case <valor 2> <bloco de código 2> ... otherwise <bloco de código de tratamento de exceções> end
Simulando um CSTR Após escrever o código-M da função-S, basta inserir um bloco S-Function e configurá-lo. A configuração exige apenas o nome do arquivo-M e a lista de parâmetros opcionais (caso a função os possua).
Simulando um CSTR Após inserir e configurar o bloco, pode-se criar uma máscara para ele. A máscara do bloco irá gerar uma janela para entrada dos parâmetros opcionais pelo usuário. Para criar uma máscara, selecione o bloco S-Function e, no menu Edit, escolha a opção Edit Mask. Na aba Icon, pode-se entrar o nome do bloco que aparecerá no diagrama. Na aba Initialization, edita-se a lista de parâmetros que o usuário deverá entrar, antes da simulação.
Simulando um CSTR O modelo já pode ser simulado. As saídas são: