Contenido principal

Integrar funciones de MATLAB en gráficos de Stateflow

Puede utilizar funciones de MATLAB® para implementar algoritmos complejos en los gráficos de Stateflow®. Puede utilizar funciones de MATLAB para:

  • Expresar cálculos matemáticos, procesar datos o analizar estadísticas.

  • Incorporar algoritmos establecidos de MATLAB en la máquina de estados.

  • Encapsular lógica compleja para simplificar el diseño del gráfico.

Para obtener más información sobre cómo crear funciones de MATLAB para su uso en gráficos de Stateflow, consulte Reuse MATLAB Code by Defining MATLAB Functions.

Añadir funciones de MATLAB a un gráfico de Stateflow

En este ejemplo, se construye un modelo que contiene dos funciones de MATLAB y se utilizan para calcular la media y la desviación estándar de los datos que se introducen en el gráfico.

Configurar el modelo

  1. Cree un nuevo modelo de Simulink®.

  2. Añada un bloque Chart, un bloque Constant y dos bloques Display.

  3. Establezca el valor del bloque Constant en [2 3 4 5].

    Simulink model that contains a Stateflow chart, a constant block, and two display blocks.

  4. Guarde el modelo como call_stats_function_stateflow.

Configurar el gráfico de Stateflow

  1. Abra el bloque Chart.

  2. Añada dos funciones de MATLAB utilizando el icono de función de MATLAB .

  3. Etiquete las funciones con estas firmas:

    • meanout = meanstats(vals)

    • stdevout = stdevstats(vals)

      Stateflow chart with two MATLAB functions called meanstats and stdevstats.

  4. Añada una transición predeterminada a una intersección final con esta acción de condición:

    {
    mean = meanstats(invals);
    stdev = stdevstats(invals);
    }

    Stateflow chart with a transition that calls the two MATLAB functions.

    Si los argumentos de una firma de función son escalares, compruebe que las entradas y salidas de las llamadas a función sigan las reglas de la expansión escalar. Para obtener más información, consulte Asignar valores a todos los elementos.

Definir elementos de datos

  1. Abra el panel Symbols.

  2. Establezca los tipos de datos para estos datos utilizando la columna Type:

    • invals: Input Data

    • stdev: Output Data

    • mean: Output Data

    The data in the symbols pane.

Programar la función de desviación estándar

Abra la función stdevstats y añada este código:

function stdevout = stdevstats(vals)
%#codegen

% Calculate standard deviation
len = length(vals);
stdevout = sqrt(sum(((vals-avg(vals,len)).^2))/len);

function meanfcn = avg(inputArray,inputSize)
    meanfcn = sum(inputArray)/inputSize;

La función sum calcula el valor de stdevout. La directiva de compilación %#codegen ayuda a detectar infracciones en tiempo de compilación de sintaxis y semántica en funciones de MATLAB que admiten la generación de código.

Programar la función de media

Abra la función meanstats y añada este código:

function meanout = meanstats(vals)
%#codegen

% Calculate statistical mean
len = length(vals);
meanout = avg(vals,len);

% Plot results (simulation only)
coder.extrinsic("plot");
plot(vals,"-+");

function meanfcn = avg(inputArray,inputSize)
    meanfcn = sum(inputArray)/inputSize;

La función length admite la generación de código y devuelve la longitud de un vector. La función avg calcula el valor de meanout. Se define plot como extrínseca, ya que no se admite para la generación de código.

Simular el modelo

Conecte los bloques de Simulink a los puertos de entrada y de salida del gráfico.

The Simulink model is connected to Stateflow.

Haga clic en Run. Los números de la media y la desviación estándar aparecen en los bloques Display.

The Display blocks show the results of simulation.

Generar código a partir de gráficos que utilizan funciones de MATLAB

Para generar código, todas las funciones deben admitir la generación de código. Si una función no admite la generación de código, puede utilizar coder.extrinsic (Simulink) para marcarla como una excepción. Para ver una lista de funciones que MATLAB admite para la generación de código, consulte Funciones y objetos admitidos con la generación de código C/C++ (MATLAB Coder).

Consulte también

(Simulink)

Temas