Documente Academic
Documente Profesional
Documente Cultură
136
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:
1º
2º
Dibuje el diagrama y
Selecciones agrupando
grabe su diseño en un
mediante el mouse, el
archivo.mdl
sub-sistema deseado.
El resultado es:
3º
Para crear el sub-
sistema, seleccione el
ítem señalado en el
menú Edit.
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.
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.
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:
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:
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).
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.
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;
» ci=[0.02; 0];
» a=1;
» b=1;
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.
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.
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.
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
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.
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;
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=[ ];