Académique Documents
Professionnel Documents
Culture Documents
136
10.3 Creacin 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 simplificacin 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 solucin de la siguiente ecuacin diferencial lineal con parmetros tiempo variantes: dx (t ) = a (t ) x (t ) + u (t ) dt donde a(t)>0 es el parmetro tiempo variante, x=x(t) es la variable de estado y u=u(t) la excitacin. Lo anterior posee el siguiente diagrama SIMULINK:
1
El resultado es:
137
En el generador de seales escoja una onda cuadrada de frecuencia 0.1Hz. Para el parmetros tiempo variante a(t)=1+0.2sin(t). La variable temporal es establecida mediante el bloque clock. Ahora corresponde editar directamente el subsistema y asignar propiedades.
Al hacer doble click sobre subsystems, aparece 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 interpretacin.
Con respecto a las propiedades de este bloque destaca la prioridad de ejecucin (priority) y la funcin a ejecutar (open function). La primera es con respecto a los dems bloques y la segunda ejecuta la funcin invocada al hacer doble click sobre el sub-sistema.
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 Descripcin de S-Function El bloque S-Function permite manejar eventos continuos, discretos o hbridos, todos simultneamente debido a su particular estructura de programacin. La S-Function, se ubica en la librera Function & Tables y se edita como sigue:
donde:
sys o1,...om nombre x u flag p1,...pn
Variable reservada para cada estado. Salidas de cada estado o flag. Nombre de la funcin que invoca el bloque. Estados continuos y discretos en ese orden. Excitacin o entrada al bloque Variable que identifica el estado de simulacin. Parmetros de entrada opcionales.
De tales variables, la forma de utilizar la variables flag, hace que del archivo.m posea caracterstica de S-Function. Los valores permitidos para esta variable son: Valor flag
flag=0 flag=1 flag=2 flag=3 flag=4 flag=9
Estado de Simulacin Condiciones iniciales y tamao de los parmetros. Clculo de derivadas. Actualizacin estados discretos. Clculo de salidas. Clculo del prximo intervalo de muestreo. Fin de la tarea de simulacin.
139
El orden de ejecucin de SIMULINK sobre una S-Function es el siguiente: 1 Inicializacin, 2 Clculo del prximo intervalo, 3 Clculo de las salidas, 4 Actualizacin de estados discretos e 5 Integracin. La variable sys debe ser especificada cuando la simulacin esta en el estado flag=0. Esta es un vector con la siguiente descripcin:
sys(1) sys(2) sys(3) sys(4) sys(5) sys(6)
Nmero de estados continuos. Nmero de estados discretos. Nmero de salidas. Nmero de entradas. Nmero de races discontinuas. Flag de lazos algebraicos.
10.4.2 Ejemplo no lineal Considere el oscilador de Van der Poll modificado, correspondiente a la siguiente ecuacin diferencial: d2y dy + a y2 1 +b y = u 2 dt dt x1 = y
1 = x2 x 2 = ax 2 1 x1 2 bx1 + u x
Para conocer la solucin dinmica de tal ecuacin, implementemos una S-Function, que posea como entrada un escaln ( u=u(t) ). Adems, que sea posible ingresar desde la lnea 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
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 nmero de estados continuos es 2, estados discretos: 0, salidas: 2, entradas: 1, races y lazos: 0.
%S-Function para el oscilador de %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
para u(t)=0,
La simulacin tiene los siguientes parmetros. En el algoritmo de integracin, AbsTol=1e-6, RelTol=1e-6, tspan=100. La seal escaln es de amplitud 1 en el tiempo
5.
141
10.5 Mascaras Las S-Functions o los sub-sistemas, generalmente dependen de parmetros que se asignan por la lnea de comandos de MATLAB. Esto incomoda bastante a la hora de ejecutar mltiples evaluaciones. Las mscaras proveen de una interfaz, que permite modificar directamente tales parmetros, como una propiedad del bloque enmascarado. 10.5.1 Ejemplo Para conocer como funciona la herramienta de mscara de un sub-sistema o S-Function, enmascaremos la S-function vdp_mod del ejemplo anterior. Seleccione el bloque y edite sus mascara.
142
Se escribe el cdigo necesario para dibujar la cara de la mscara. Por ejemplo texto, lneas, polgonos, etc.
Aqu se comenta de qu se trata este bloque, como por ejemplo la funcin que implementa. Adems alguna ayuda en el ingreso de parmetros.
Finalmente despus de agregar un poco de color, texto y cambio de parmetros el diagrama queda dibujado por.
De esta manera, podemos modificar cada uno de los parmetros en forma directa y obtener en forma simple muchas evaluaciones sin recurrir a la lnea de comandos.
143
10.6 Ejemplo de animacin Corresponde ahora simular una ecuacin diferencial ordinaria de segundo orden, equivalente a una estructura ideal de nico grado de libertad, como la de la figura: y d y dy 2 + 2 n + n y = u 2 dt dt x1 = y
2
1 = x2 x 2 = 2 n x 2 n 2 x1 u x u
En este diagrama de bloques, los parmetros a ingresar son T, , mag. Tales parmetros son inicializados por un bloque, que consiste en un sub-sistema que ejecuta en su opcin open function mag=1; T=0.5; chi=0.02. Adems, ste tiene una mscara con la opcin Drawing commands en
disp('Inicializacion: mag, chi, T').
Para la simulacin 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 ecuacin diferencial de segundo orden, donde cada Scope permite observar las variables de inters. Adems, la simulacin ejecuta la S-Function columna enmascarada como animacin, que tiene como seal de entrada la deformacin x y como parmetro el tiempo de muestreo ts. A continuacin se describe la S-Function que permite animar la deformacin de la columna.
144
function [sys,x0]=columna(t,x,u,flag,ts); L=2; global canim switch flag case 0 animinit('Animacion'); [flag,canim] = figflag('Animacion'); axis([-2 2 -0.5*L 1.5*L]); x=[0 0]; y=[0 L]; 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=[ ]; 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=[ ];
case 4 ns = t/ts; sys = (1 + floor(ns + 1e-13*(1+ns)))*ts; case {1,3,9} sys=[ ]; otherwise error(['Flag desconocido=', num2str(flag)]); end;
Deformacin: