S-Function
Incluir la función S en el modelo
Bibliotecas:
Simulink /
User-Defined Functions
Descripción
El bloque S-Function permite integrar algoritmos de funciones S o funciones del sistema escritos en C, C++ o Fortran, conocidos como funciones S en C MEX, en modelos de Simulink. Puede utilizar el bloque para implementar funciones S en C MEX de nivel 1 o nivel 2. Para incorporar su función S en un modelo, después de compilar su función S en C MEX:
Arrastre un bloque S-function de Simulink Library Browser a su modelo.
Abra el cuadro de diálogo Block Parameters y especifique el nombre de la función S en el campo S-function name para proporcionar funcionalidad al bloque S-function. Por ejemplo, escriba
timestwo
y seleccione Apply.
Las funciones S describen en lenguaje informático un bloque de Simulink® escrito en MATLAB®, C, C++ o Fortran®. Si tiene funciones S en C, C++ o Fortran, se deben compilar como archivos MEX mediante la utilidad mex
(consulte Crear funciones C MEX). Las funciones S definen cómo funciona un bloque durante diferentes partes de la simulación, como la inicialización, la actualización, las derivadas, las salidas y la terminación. Las funciones S utilizan una sintaxis de llamada especial denominada API de funciones S que permite interactuar con el motor de Simulink. Esta interacción es muy similar a la que tiene lugar entre el motor y los bloques de Simulink integrados. En cada paso de una simulación, el motor de simulación invoca un método para realizar una tarea específica.
Luego se muestra un ejemplo de una función S simple en C MEX denominada timestwo.c
que produce como salida el doble de su entrada.
#define S_FUNCTION_NAME timestwo /* Specifies the name of the S-function (timestwo) */
#define S_FUNCTION_LEVEL 2 /* Specifies that the S-function is in the Level 2 format */
#include "simstruc.h" /* Defines the data structure */
static void mdlInitializeSizes(SimStruct *S) /* Initialize the input and output ports and their size */
{
ssSetNumSFcnParams(S, 0);
if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S)) {
return; /* Parameter mismatch reported by the Simulink engine*/
}
if (!ssSetNumInputPorts(S, 1)) return;
ssSetInputPortWidth(S, 0, DYNAMICALLY_SIZED);
ssSetInputPortDirectFeedThrough(S, 0, 1);
if (!ssSetNumOutputPorts(S,1)) return;
ssSetOutputPortWidth(S, 0, DYNAMICALLY_SIZED);
ssSetNumSampleTimes(S, 1);
/* Take care when specifying exception free code - see sfuntmpl.doc */
ssSetOptions(S, SS_OPTION_EXCEPTION_FREE_CODE);
}
static void mdlInitializeSampleTimes(SimStruct *S) /* Set the sample time of the S-function as inherited */
{
ssSetSampleTime(S, 0, INHERITED_SAMPLE_TIME);
ssSetOffsetTime(S, 0, 0.0);
}
static void mdlOutputs(SimStruct *S, int_T tid) /* Calculate the block output for each time step */
{
int_T i;
InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S,0);
real_T *y = ssGetOutputPortRealSignal(S,0);
int_T width = ssGetOutputPortWidth(S,0);
for (i=0; i<width; i++) {
*y++ = 5.0 *(*uPtrs[i]);
}
}
static void mdlTerminate(SimStruct *S){} /* Perform tasks at the end of the simulation */
#ifdef MATLAB_MEX_FILE /* Is this file being compiled as a MEX-file? */
#include "simulink.c" /* MEX-file interface mechanism */
#else
#include "cg_sfun.h" /* Code generation registration function */
#endif
Las funciones S siguen una forma general y pueden adaptarse a sistemas continuos, discretos e híbridos. Puede implementar un algoritmo en una función S y usar el bloque S-Function para añadirlo a un modelo de Simulink. Después de escribir su función S y colocar su nombre en un bloque S-Function (disponible en la biblioteca de bloques User-Defined Functions), puede personalizar la interfaz gráfica mediante enmascaramiento. En este ejemplo, la función timestwo.c
se compila utilizando mex timestwo.c
y se implementa utilizando el bloque S-Function.
El bloque S-Function muestra el nombre de la función S especificada y el número de puertos de entrada y salida especificados por la función S. Las señales conectadas a las entradas deben tener las dimensiones especificadas por la función S para las entradas.
Nota
Utilice el bloque Level-2 MATLAB S-Function para incluir una función S de MATLAB de nivel 2 en un diagrama de bloques.
Ejemplos
Puertos
Entrada
Salida
Parámetros
Características del bloque
Capacidades ampliadas
Historial de versiones
Introducido antes de R2006a