Main Content

Implementar funciones de MATLAB en Simulink con bloques MATLAB Function

Los bloques MATLAB Function permiten definir funciones personalizadas en modelos de Simulink® utilizando el lenguaje de MATLAB®. Los bloques MATLAB Function admiten la generación de código de C/C++ de Simulink Coder™ y Embedded Coder®.

Utilice estos bloques cuando:

  • Tiene una función existente de MATLAB que modela una funcionalidad personalizada, o resulta fácil crear una función de ese tipo.

  • Su modelo requiere una funcionalidad personalizada que no se ha capturado o no se puede capturar en el lenguaje gráfico de Simulink.

  • Resulta más fácil modelar una funcionalidad personalizada utilizando una función de MATLAB que utilizando un diagrama de bloques de Simulink.

  • La funcionalidad personalizada que desea modelar no incluye estados dinámicos continuos o discretos. Para modelar estados dinámicos, utilice las funciones S. Consulte Creación y configuración de funciones S de MATLAB.

Calcular la desviación media y estándar con un bloque MATLAB Function

Este ejemplo empieza con un modelo que incluye un bloque MATLAB Function y le guía para personalizar el bloque a fin de calcular la desviación media y estándar para un vector de valores.

Abrir el modelo

El modelo call_stats_block1 incluye un bloque MATLAB Function vacío y los bloques que necesita para el ejemplo. Abra el modelo.

Programar el bloque MATLAB Function

Programe el bloque para calcular la desviación media y estándar para un vector de valores.

  1. Para abrir MATLAB Function Block Editor, haga doble clic en el bloque MATLAB Function. En MATLAB Function Block Editor aparece una función predeterminada con dos variables: un argumento de entrada y un argumento de salida.

    This image shows the MATLAB Function Block Editor after it has been opened from the call_stats_block1 model. It includes a default function.

  2. Defina las entradas y las salidas de la función editando la instrucción de declaración de función:

    function [mean, stdev] = stats(vals)
    

    Esta instrucción define una función denominada stats con tres variables. La instrucción define un argumento de entrada, vals, y dos argumentos de salida, mean y stdev.

  3. En una nueva línea después de la instrucción de declaración de función, añada el siguiente código:

    % Calculates a statistical mean and a standard
    % deviation for the values in vals.
    
    len = length(vals);
    mean = avg(vals,len);
    stdev = sqrt(sum(((vals-avg(vals,len)).^2))/len);
    plot(vals,"-+");
    
    function mean = avg(array,size)
    mean = sum(array)/size;
    
  4. Salga del bloque. El bloque actualiza los nombres de los puertos. Las salidas mean y stdev de la función se corresponden con los puertos de salida mean y stdev del bloque, y la entrada vals de la función se corresponde con el puerto de entrada vals del bloque.

  5. Complete las conexiones con el bloque MATLAB Function como se muestra a continuación.

    This shows connected signals between the blocks established in the previous image.

  6. Guarde el modelo como call_stats_block2.

Comprobar las propiedades para las variables de un bloque MATLAB Function

Puede comprobar y gestionar las propiedades para las variables de los bloques MATLAB Function. Consulte Create and Define MATLAB Function Block Variables. En este ejemplo, verifique que el argumento de entrada vals hereda sus propiedades de tipo y tamaño:

  1. Haga doble clic en el bloque MATLAB Function.

  2. Abra el panel Symbols y Property Inspector. En la pestaña Function, haga clic en Edit Data.

    El panel Symbols muestra los nombres de las variables en la columna Name. La columna Type determina la asignación de los puertos de los argumentos de las funciones y dónde aparece en la instrucción de declaración de función. En este ejemplo, vals se asigna a un puerto de entrada. mean y stdev se asignan a puertos de salida. Si cambia la entrada Type para cualquier variable, la instrucción de declaración de función también cambia.

  3. Compruebe las propiedades de vals. En el panel Symbols, haga clic en la fila de vals. Property Inspector se actualiza para mostrar las propiedades de vals. La propiedad Scope coincide con la columna Type.

    Solo se pueden heredar algunas propiedades: Size, Unit, Complexity y Type. Las variables indican que heredan estas propiedades cuando Size es -1, Unit es inherit, Complexity es Inherited y Type es Inherit: Same as Simulink. En este ejemplo, vals utiliza estos valores para Size y Type.

Compruebe las demás variables del bloque MATLAB Function seleccionándolas en el panel Symbols.

De forma predeterminada, las variables de entrada y salida recién definidas heredan su tamaño, unidad, complejidad y tipo. Si desea que las variables utilicen un tamaño, unidad o tipo específicos, puede indicar estas propiedades explícitamente. Por ejemplo, introduzca [2 3] en la propiedad Size para especificar la variable como una matriz de 2-by-3. Para obtener más información, consulte Define and Modify Variable Data Types y Specify Size of MATLAB Function Block Variables.

Construir la función

Después de introducir el código en un bloque MATLAB Function, puede comprobar si contiene errores y construir la función. Consulte Debug MATLAB Function Blocks.

Cuando construye un modelo, MATLAB utiliza un compilador para compilar el código de su bloque MATLAB function. Si tiene varios compiladores compatibles con MATLAB instalados en su sistema, puede cambiar el compilador predeterminado utilizando el comando mex -setup. Consulte Cambiar el compilador predeterminado. Para ver una lista de compiladores admitidos, abra Compiladores admitidos, haga clic en la pestaña correspondiente para su sistema operativo, encuentre la tabla Simulink Product Family y vaya a la columna For Model Referencing, Accelerator mode, Rapid Accelerator mode, and MATLAB Function blocks.

En Simulink, haga clic en Run para simular el modelo. El software construye el bloque MATLAB Function cuando construye el modelo, y produce como salida los datos de la función a los dos bloques Display.

Preparar el bloque para generar código

Para generar código C/C++ independiente a partir de un modelo que contiene bloques MATLAB Function, utilice Simulink Coder o Embedded Coder.

Seleccionar un compilador admitido para compilaciones de simulación y generación de código

Para ver una lista de compiladores admitidos, abra Compiladores admitidos, haga clic en la pestaña correspondiente para su sistema operativo, encuentre la tabla Simulink Product Family y vaya a la columna Simulink Coder.

Generar código para el bloque MATLAB Function

Si tiene una licencia para Simulink Coder o Embedded Coder, puede generar código a partir del modelo. Para generar código:

  1. En el modelo call_stats_block2, haga doble clic en el bloque MATLAB Function.

  2. Abra SimulinkCoder o Embedded Coder.

  3. En la pestaña C Code, pulse Build para compilar y construir el modelo de ejemplo.

    Si obtiene un error relacionado con el solver Variable-step, abra la ventana Configuration Parameters y, a continuación, haga clic en Solver en el panel de la izquierda. En Solver selection, establezca Type en Fixed-step (Paso fijo) y vuelva a generar el código. Para obtener más información sobre las diferencias entre los solvers de paso fijo y de paso variable, consulte Fixed-Step Versus Variable-Step Solvers.

Consulte también

| |

Temas relacionados

Sitios web externos