Sunteți pe pagina 1din 9

Introducción a Matlab, un enfoque a la simulación y visualización dinámica.

136

10.3 Creación de Sub-Sistemas


Cuando los diagramas de bloques en SIMULINK aumentan en complejidad o es necesario crear un
bloque diferente a los existentes, es necesario a una simplificación por medio de sub-sistemas. Para
crear un sub-sistema, es necesario agrupar elementos ya existentes o editar directamente sobre la
venta de dicho ambiente.

10.3.1 Ejemplo lineal


Para crear un sistema, abordemos la solución de la siguiente ecuación diferencial lineal con
parámetros tiempo variantes:
dx(t )
  a (t ) x(t )  u (t )
dt

donde a(t)>0 es el parámetro tiempo variante, x=x(t) es la variable de estado y u=u(t) la excitación.
Lo anterior posee el siguiente diagrama SIMULINK:



Dibuje el diagrama y
Selecciones agrupando
grabe su diseño en un
mediante el mouse, el
archivo.mdl
sub-sistema deseado.

El resultado es:

Para crear el sub-
sistema, seleccione el
ítem señalado en el
menú Edit.

Escuela de Ingeniería Civil, Universidad del Bio-Bio, Septiembre del 2000


Introducción a Matlab, un enfoque a la simulación y visualización dinámica. 137

Para simular este diagrama realicemos las siguientes asignaciones:

En el generador de señales escoja una onda


cuadrada de frecuencia 0.1Hz. Para el
parámetros tiempo variante a(t)=1+0.2·sin(t).
La variable temporal es establecida mediante el
bloque clock.

Ahora corresponde editar directamente el sub-


sistema y asignar propiedades.

Al hacer doble click sobre subsystems, aparece Así, el diagrama final queda representado por:
un diagrama, donde In1,In2, son las puertas
de entrada y Out1 es la puerta de salida. Usted
puede modificar sus nombres a variables de
mayor interpretación.

Con respecto a las propiedades de este bloque


destaca la prioridad de ejecución (priority) y la
función a ejecutar (open function). La primera es
con respecto a los demás bloques y la segunda
ejecuta la función invocada al hacer doble click
sobre el sub-sistema.

Escuela de Ingeniería Civil, Universidad del Bio-Bio, Septiembre del 2000


Introducción a Matlab, un enfoque a la simulación y visualización dinámica. 138

10.4 S-Function
En algunas ocasiones, los diagramas de bloques en SIMULINK no pueden implementar funciones
requeridas por el usuario de manera simple o directa. Para lo anterior, SIMULINK dispone de la
denominada S-Function, que incorpora un programa de archivo.m como un bloque al diagrama.

10.4.1 Descripción de S-Function


El bloque S-Function permite manejar eventos continuos, discretos o híbridos, todos
simultáneamente debido a su particular estructura de programación. La S-Function, se ubica en la
librería Function & Tables y se edita como sigue:

Luego el formato cabecera del archivo.m que ejecuta la S-Function es el siguiente:

function [sys, o1,..,om]=nombre(t,x,u,flag,p1,...,pn)


donde:
sys Variable reservada para cada estado.
o1,...om Salidas de cada estado o flag.
nombre Nombre de la función que invoca el bloque.
x Estados continuos y discretos en ese orden.
u Excitación o entrada al bloque
flag Variable que identifica el estado de simulación.
p1,...pn Parámetros de entrada opcionales.

De tales variables, la forma de utilizar la variables flag, hace que del archivo.m posea característica
de S-Function. Los valores permitidos para esta variable son:

Valor flag Estado de Simulación


flag=0 Condiciones iniciales y tamaño de los parámetros.
flag=1 Cálculo de derivadas.
flag=2 Actualización estados discretos.
flag=3 Cálculo de salidas.
flag=4 Cálculo del próximo intervalo de muestreo.
flag=9 Fin de la tarea de simulación.

Escuela de Ingeniería Civil, Universidad del Bio-Bio, Septiembre del 2000


Introducción a Matlab, un enfoque a la simulación y visualización dinámica. 139

El orden de ejecución de SIMULINK sobre una S-Function es el siguiente: 1º Inicialización, 2º


Cálculo del próximo intervalo, 3º Cálculo de las salidas, 4º Actualización de estados discretos e 5º
Integración.

La variable sys debe ser especificada cuando la simulación esta en el estado flag=0. Esta es un
vector con la siguiente descripción:

sys(1) Número de estados continuos.


sys(2) Número de estados discretos.
sys(3) Número de salidas.
sys(4) Número de entradas.
sys(5) Número de raíces discontinuas.
sys(6) Flag de lazos algebraicos.

10.4.2 Ejemplo no lineal


Considere el oscilador de Van der Poll modificado, correspondiente a la siguiente ecuación
diferencial:

 a ·  y 2  1
d2y dy
2
 b ·y  u  x 1  x 2
dt dt
x1  y  2

x 2  ax2 1  x1  bx1  u

Para conocer la solución dinámica de tal ecuación, implementemos una S-Function, que posea como
entrada un escalón ( u=u(t) ). Además, que sea posible ingresar desde la línea de comandos las
condiciones iniciales ci (por ejemplo x0=[0.02 0] ) y las ganancias a y b (por ejemplo a=3, b=1).

1º Dibujemos el diagrama de bloques en SIMULINK como sigue:

Escuela de Ingeniería Civil, Universidad del Bio-Bio, Septiembre del 2000


Introducción a Matlab, un enfoque a la simulación y visualización dinámica. 140

2º De acuerdo al diagrama SIMULINK, se crea un archivo.m con el nombre vdp_mod.m, con una
entrada u=u(t), dos salidas x1 y x2, dependiente de ci, a y b. El número de estados continuos es
2, estados discretos: 0, salidas: 2, entradas: 1, raíces y lazos: 0.

%S-Function para el oscilador de Los resultados son los siguientes:


%Van der Pool modificado.

function [sys,x0]=vdp_mod(t,x,u,flag,ci,a,b)

switch flag

case 1
sys(1)=x(2);
sys(2)=a*x(2)*(1-x(1)^2) - b*x(1) + u;

case 3
sys(1)=x(1);
sys(2)=x(2);

case 0
sys=[2,0,2,1,0,0];
x0=ci;

case {2,4,9}
sys=[ ];

otherwise
error(['Flag desconocido=', num2str(flag)]);

end;

3º Ahora asignemos los valores de los para u(t)=0,


parámetros de la S-Function.

» ci=[0.02; 0];
» a=1;
» b=1;

4º La simulación tiene los siguientes


parámetros. En el algoritmo de integración,
AbsTol=1e-6, RelTol=1e-6, tspan=100. La
señal escalón es de amplitud 1 en el tiempo
5.

Escuela de Ingeniería Civil, Universidad del Bio-Bio, Septiembre del 2000


Introducción a Matlab, un enfoque a la simulación y visualización dinámica. 141

10.5 Mascaras
Las S-Functions o los sub-sistemas, generalmente dependen de parámetros que se asignan por la
línea de comandos de MATLAB. Esto incomoda bastante a la hora de ejecutar múltiples evaluaciones.
Las máscaras proveen de una interfaz, que permite modificar directamente tales parámetros, como
una propiedad del bloque enmascarado.

10.5.1 Ejemplo
Para conocer como funciona la herramienta de máscara de un sub-sistema o S-Function,
enmascaremos la S-function vdp_mod del ejemplo anterior. Seleccione el bloque y edite sus mascara.

La mascara, se constituye de 3
elementos: la parte visual o icono,
la entrada de parámetros y la
ayuda.

Antes de editar ejecute.


Cada parámetro se
agrega o elimina aquí. »icon=[y(:,2), y(:,3)];
» save icon.mat icon

Aquí se especifica el
texto y la variable que
almacenará cada
parámetro.
Tipo de
variable que
almacena el
parámetro.
Instrucciones ejecutadas al
abrir el diagrama de
bloques.

Escuela de Ingeniería Civil, Universidad del Bio-Bio, Septiembre del 2000


Introducción a Matlab, un enfoque a la simulación y visualización dinámica. 142

Aquí se comenta de
Se escribe el código
qué se trata este
necesario para dibujar la
bloque, como por
cara de la máscara. Por
ejemplo la función que
ejemplo texto, líneas,
implementa. Además
polígonos, etc.
alguna ayuda en el
ingreso de parámetros.

Finalmente después de agregar un poco de color, texto y cambio de parámetros el diagrama queda
dibujado por.

De esta manera, podemos


modificar cada uno de los
parámetros en forma directa y
obtener en forma simple
muchas evaluaciones sin
recurrir a la línea de
comandos.

Escuela de Ingeniería Civil, Universidad del Bio-Bio, Septiembre del 2000


Introducción a Matlab, un enfoque a la simulación y visualización dinámica. 143

10.6 Ejemplo de animación


Corresponde ahora simular una ecuación diferencial ordinaria de segundo orden, equivalente a una
estructura ideal de único grado de libertad, como la de la figura:

y
2
d y dy m
 2 n   n y  u
2
2
 x 1  x 2
dt dt
x 2  2 n x 2   n x1  u
2
x1  y
u

El diagrama SIMULINK equivalente es:

En este diagrama de bloques, los parámetros a ingresar son T, , mag. Tales parámetros son
inicializados por un bloque, que consiste en un sub-sistema que ejecuta en su opción open function
mag=1; T=0.5; chi=0.02. Además, éste tiene una máscara con la opción Drawing commands en
disp('Inicializacion: mag, chi, T').
Para la simulación se carga el archivo sismo.mat, que en su primera columna posee el tiempo y en la
segunda la magnitud normalizada del sismo (recuerde que siempre la primera fila debe ser el
tiempo).
El diagrama de bloques establece apropiadamente la ecuación diferencial de segundo orden, donde
cada Scope permite observar las variables de interés. Además, la simulación ejecuta la S-Function
columna enmascarada como animación, que tiene como señal de entrada la deformación x y como
parámetro el tiempo de muestreo ts.

Escuela de Ingeniería Civil, Universidad del Bio-Bio, Septiembre del 2000


Introducción a Matlab, un enfoque a la simulación y visualización dinámica. 144

A continuación se describe la S-Function que permite animar la deformación de la columna.

function [sys,x0]=columna(t,x,u,flag,ts); case 4


L=2;
global canim ns = t/ts;
sys = (1 + floor(ns + 1e-13*(1+ns)))*ts;
switch flag
case {1,3,9}
case 0 sys=[ ];

animinit('Animacion'); otherwise
[flag,canim] = figflag('Animacion'); error(['Flag desconocido=', num2str(flag)]);
axis([-2 2 -0.5*L 1.5*L]);
x=[0 0]; y=[0 L]; end;

hp(1)=line('Xdata',x, 'Ydata', y, ...


'LineStyle','-', 'LineWidth', 2, ...
'EraseMode','background','Color', [0 0 1]);
hp(2)=line('Xdata',0,'Ydata',L,'Marker', ‘.',...
'MarkerSize',40,'EraseMode','back',...
'Color', [1 0 0]);
hp(3)=line('Xdata',[-0.5 0.5],'Ydata', [0 0], ...
'LineStyle','-', 'LineWidth', 2,...
'Color', [0 0 0]);

set(gca,'DataAspectRatio',[1 1 1]);
set(gca,'UserData',hp);
sys=[0 0 0 2 0 0];
x0=[ ];
Deformación:
case 2

if any(get(0,'Children')==canim),
if strcmp(get(canim,'Name'),'Animacion'),
set(0,'currentfigure',canim);
hp=get(gca,'UserData');
x=[0 u(1)];
y=[0 L*cos(asin(u(1)/L))];
set(hp(1),'XData',x,'YData',y);
set(hp(2),'XData',x(2),'YData',y(2));
drawnow;
end
end
sys=[ ];

Escuela de Ingeniería Civil, Universidad del Bio-Bio, Septiembre del 2000

S-ar putea să vă placă și