Está en la página 1de 3

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.

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.
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.

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

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

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:

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.

También podría gustarte