Escolar Documentos
Profissional Documentos
Cultura Documentos
Fig. 2-1: (S-function ) bloco do Simulink e parmetros do bloco Na janela de parmetros do bloco S-function deve ser indicado o nome da funo. Se fr codificada em Matlab, o cdigo deve ser guardado numa m-file com o mesmo nome da funo (e extenso .m).
u (entradas)
x (estados)
y (sadas)
E segundo um modelo de espao de estados, e sabendo que se tem estados contnuos e discretos, isto :
2-1
No caso de se ter estados discretos em cada instante de amostragem deve ser feita a actualizao destes (o equivalente discreto da derivada dos estados contnuos):
+1 k xk = Ax d + Bu k d
ou
k +1 k xd = f (t, x d , uk )
parmetros de entrada:
f t x u flag
Nome da S-functions Tempo corrente vector de estado entrada do bloco Indica uma tarefa a ser desempenhada durante a simulao
So parmetros adicionais Quando o tempo de amostragem varia normalmente p1 usado para indicar esse valor S-function. Os valores destes parmetros devem ser indicados na janela de parmetros do bloco, mostrada na Fig. 2-1, na linha de entrada intitulada S-function parameters separados por vgulas. Podem ser
constantes ou variveis definidas no workspace do Matlab.
parmetros de sada
sys
argumento de retorno genrico. Os valores dependem de flag. (Ex. se flag = 3, sys contm a sada da S-function (ou do bloco))
2-2
Simulink S-functions x0 str ts Valores iniciais dos estados Reservado para uso futuro. S-functions devem retornar a matriz vazia [ ] Matriz com duas colunas contendo o intervalo de amostragem
Clculo do prximo instante de amostragem (apenas para blocos com tempo de amostragem varivel) flag = 4
flag = 2
flag = 1
Finalizao da simulao
flag = 9
A simulao segue o diagrama anterior. No inicio todos os blocos so inicializados (flag=0). Entra-se ento num ciclo de simulao onde primeiro calculado o prximo instante de amostragem (flag=4) de modo que o clculo da sada (flag=3) seja executado apenas aps a amostragem de novos dados. Seguidamente so actualizados os estados discretos (flag=2). Antes de se aguardar pela prxima amostra, so ainda calculadas as derivadas dos estados contnuos (flag=1). Podem ainda ser efectuadas algumas tarefas antes do fim da simulao (flag=9).
2-3
Simulink S-functions Como ilustra o diagrama as tarefas que so efectuadas durante a simulao dependem do valor do parmetro de entrada flag. Este parmetro fornecido pelo prprio Simulink, cada vez que chama a S-function de modo a indicar qual a etapa em que a simulao se encontra.
if flag==0 (...)
Nota: O sinal uma sinuside com amplitude 1 e frequncia 1 rad / s. Um perodo de amostragem conveniente ser 0.1. (Pode-se tentar 1 para ver o efeito)
2-4
Simulink S-functions function [sys, x0, str, ts] = gain01(t, x, u, flag, ts)
%inicializao if flag == 0 %estados contnuos = 0 %estados discretos = 0 %sadas = 1 %entradas = 1 %raizes continuas. reservado deve ser 0 %direct feedtrough deve ser 1 se u usado em flag=3 %sample times = 1 sys = [0 0 1 1 0 1 1]; x0 = [ ]; str = [ ]; ts = [-2 0]; %tempo de amostragem varivel
%Calcula prximo instante de amostragem elseif flag == 4 ns = t / ts; sys = (1 + floor(ns + 1e-13*(1+ns)))*ts; %ns n de amostras %momento da prxima amostra
2-5
Simulink S-functions
Repare-se que a S-function, mais as suas entradas e sadas foram agrupadas num subsistema. No caso de mltiplas entradas usado um Multiplexer de modo a transformar os
sinais independentes num vector. Quanto sada consiste num vector com tantas posies como o nmero de sadas de modo que se for ligada a um Scope apresenta tantos sinais como o nmero de sadas.
else if flag == 0
%Inicalizao
sys = [ 0 0 1 2 0 1 1 ]
elseif flag == 3
Simulink S-functions
Amplitude = 1 Frequncia = 1 Hz
O cdigo para a S-Function (a vermelho as alteraes em relao a gain01): Guias prticos STR 2-7
Simulink S-functions function [sys, x0, str, ts] = diff01 (t, x, u, flag, ts) %inicializao if flag == 0 %estados contnuos = 0 %estados discretos = 2 %<--- 2 estados discretos armazenam: u(k-1) e y(k) %sadas = 1 %entradas = 1 %raizes continuas. reservado deve ser 0 %direct feedtrough deve ser 1 se u usado em flag=3 %sample times = 1 sys = [0 2 1 1 0 1 1]; x0 = [0 0]; str = [ ]; ts = [-2 0]; %tempo de amostragem varivel %<--%<--- 2 Estados iniciais = 0 %<--%<---
%Calcula prximo instante de amostragem elseif flag == 4 ns = t / ts; sys = (1 + floor(ns + 1e-13*(1+ns)))*ts; %ns n de amostras %momento da prxima amostra
%Actualiza os estados discretos e envia o vector de estado %<--elseif flag == 2 y=u(1)-x(1); sys = [u(1) y]; %y=u(k)-u(k-1) %x=[u(k-1) y(k)]
%default else sys = [ ]; end Guias prticos STR 2-8 %no faz nada
Simulink S-functions Se bem que exista uma meio mais simples este exemplo serve tambm para ilustrar o uso da actualizao dos estados discretos. Outra forma de implementar o exemplo anterior (the easy way), possvel apenas nas verses recentes do Matlab, consiste em declarar uma varivel local que mantm o seu valor entre diferentes chamadas a uma funo, da mesma forma que as variveis estticas em C / C++. Para isso usa-se a palavra reservada presistent. O cdigo para a S-Function (a vermelho as alteraes em relao a gain01):
function [sys, x0, str, ts] = diff02 (t, x, u, flag, ts) persistent uk_1; %inicializao if flag == 0 sys = [0 0 1 1 0 1 1]; x0 = [ ]; str = [ ]; ts = [-2 0]; uk_1 = 0;
%<--%<---
%Calcula prximo instante de amostragem elseif flag == 4 ns = t / ts; sys = (1 + floor(ns + 1e-13*(1+ns)))*ts; %ns n de amostras %momento da prxima amostra
%Calcula a sada como a diferena entre a entrada actual e a anterior elseif flag == 3 sys = u(1)-uk_1; uk_1=u(1);
%<---
2-9
Simulink S-functions
2-10
Simulink S-functions Seguidamente deve ser editada a mascara (Edit Masc). Finalmente o valor do parmetro ts da S-function pode ser editado na janela de parmetros do bloco (sub-sistema):
2-11