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
Cree un nuevo modelo de Simulink®.
Añada un bloque Chart, un bloque Constant y dos bloques Display.
Establezca el valor del bloque Constant en [2 3 4 5].

Guarde el modelo como
call_stats_function_stateflow.
Configurar el gráfico de Stateflow
Abra el bloque Chart.
Añada dos funciones de MATLAB utilizando el icono de función de MATLAB
.Etiquete las funciones con estas firmas:
meanout = meanstats(vals)stdevout = stdevstats(vals)
Añada una transición predeterminada a una intersección final con esta acción de condición:
{ mean = meanstats(invals); stdev = stdevstats(invals); }
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
Abra el panel Symbols.
Establezca los tipos de datos para estos datos utilizando la columna Type:
invals: Input Datastdev: Output Datamean: Output Data

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.

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

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
coder.extrinsic (Simulink)