Contenido principal

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

S-Function

Incluir la función S en el modelo

  • S-Function block

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:

  1. Arrastre un bloque S-function de Simulink Library Browser a su modelo.

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

Timestwo S-function is implemented using the S-Function block. The input to the block is a sine wave and the output of the block is connected to a Scope block.

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

expandir todo

Puede configurar un puerto de entrada utilizando la función de callback mdlInitializeSizes. Use la función mdlInitializeSizes para especificar el número de puertos de entrada, la dimensión de las señales de entrada, el tiempo de muestreo de cada puerto y si los puertos tienen alimentación directa.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixed point

Salida

expandir todo

Puede configurar un puerto de salida usando la función de callback mdlInitializeSizes. Use la función mdlInitializeSizes para especificar el número de puertos de salida, la dimensión de las señales de salida y el tiempo de muestreo de cada puerto.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated | bus

Parámetros

expandir todo

Utilice este parámetro para especificar el nombre de la función S.

Uso programático

Para establecer el valor del parámetro de bloque de forma programática, use la función set_param.

Parámetro: FunctionName
Valores: 'system' (predeterminado) | S-function name in quotes

Especifique los parámetros adicionales de función S.

Los parámetros de función pueden especificarse como expresiones de MATLAB o como variables separadas por comas. Por ejemplo:

A, B, C, D, [eye(2,2);zeros(2,2)]

Aunque los parámetros individuales pueden encerrarse entre paréntesis, esto no debe hacerse con la lista de parámetros.

Uso programático

Parámetro: Parameters
Valores: '' (predeterminado) | S-function parameters in quotes

Este parámetro solo se aplica si este bloque representa una función S en C MEX y tiene la intención de usar el software Simulink Coder™ para generar código desde el modelo que contiene el bloque. Si lo utiliza y está listo para generar código, debe obligar al codificador a reconstruir el modelo superior como se explica en Control Regeneration of Top Model Code (Simulink Coder).

Para obtener más información sobre cómo usar este parámetro, consulte Specify Additional Source Files for an S-Function (Simulink Coder).

Uso programático

Parámetro: SFunctionModules
Valores: '' (predeterminado) | filenames in quotes

Características del bloque

Tipos de datos

Booleana | busa | doublea | fixed pointa | halfa | integera | singlea | stringa

Paso directo

a

Señales multidimensionales

a

Señales de tamaño variable

a

Detección de cruce por cero

a

a El soporte actual de tipo de datos o capacidad depende de la implementación de bloques.

Capacidades ampliadas

expandir todo

Historial de versiones

Introducido antes de R2006a