Ejecutar los objetos de un gráfico de Stateflow mediante scripts y modelos
Un gráfico independiente de Stateflow® es una clase de MATLAB® que define el comportamiento de una máquina de estado finito. Los gráficos independientes implementan la semántica de gráfico clásica con MATLAB como lenguaje de acción. Puede programar el gráfico utilizando todas las funciones de MATLAB, incluidas aquellas funciones restringidas para la generación de código en Simulink®. Para obtener más información, consulte Create Stateflow Charts for Execution as MATLAB Objects.
Este ejemplo muestra cómo ejecutar un gráfico de Stateflow independiente mediante un script de MATLAB o un modelo de Simulink.
Contar configuraciones de cambio para una cantidad de dinero
El archivo sf_change.sfx define un gráfico de Stateflow independiente que cuenta diferentes configuraciones de cambio para una determinada cantidad de dinero. El gráfico contiene los siguientes objetos de datos:
xes la cantidad de dinero que se desea cambiar. El valor predeterminado es 100.coinValueses un vector de denominación de monedas dispuestas en orden creciente.coinNameses un arreglo de los nombres de moneda correspondientes. Los valores predeterminados representan monedas estadounidenses estándar (peniques, monedas de 5 centavos, 10 centavos y 25 centavos).tallyes el número de configuraciones de cambio válidas.tabulaes un arreglo que contiene las diferentes configuraciones de cambio válidas.chg,done,iynson datos locales utilizados por el algoritmo para contar cambio.textWidthyquietModeson datos locales que controlan cómo el gráfico muestra sus resultados.

El gráfico comienza con una posible configuración de cambio que consta exclusivamente de monedas de menor valor, especificadas por un índice de 1. En cada paso de ejecución, el estado exchange modifica esta configuración de una de las siguientes dos maneras:
El subestado
move_upcambia algunas monedas del menor valor por una moneda de mayor valor, especificada por el índicei.
El subestado
move_downcambia algunas monedas con el valor especificado por el índiceipor monedas del menor valor. Después,move_upcambia algunas monedas del menor valor por una moneda del valor especificado por el índicei+1o superior.
Una posible configuración de cambio es válida cuando el número de centavos representado por las monedas del menor valor es divisible por el valor de ese tipo de moneda. Cuando el gráfico encuentra una nueva configuración válida, incrementa tally y añade la nueva configuración a tabula.
Cuando no se pueden intercambiar más monedas, el estado stop se convierte en activo. Este estado imprime los resultados del cálculo, transforma el contenido de tabula en una tabla y establece el valor de done en true.
Ejecutar un gráfico independiente en un script de MATLAB
Para ejecutar el algoritmo para contar cambio hasta el final, debe ejecutar el gráfico independiente varias veces. Por ejemplo, el script de MATLAB sf_change_script.m crea un objeto de gráfico chartObj e inicializa el valor de los datos locales x en 27. La opción de configuración '-warningOnUninitializedData', que el script establece en false, elimina la advertencia de que tabula es un arreglo vacío en el nuevo objeto de gráfico. El bucle while ejecuta el gráfico hasta que los datos locales done se convierten en true. Finalmente, el script muestra el valor de tabula.
chartObj = sf_change('-warningOnUninitializedData',false,x=27); while ~chartObj.done step(chartObj); end disp(chartObj.tabula)
sf_change_script
.............
There are 13 ways to make change for 27 cents.
Pennies Nickels Dimes Quarters
_______ _______ _____ ________
27 0 0 0
22 1 0 0
17 2 0 0
12 3 0 0
7 4 0 0
2 5 0 0
17 0 1 0
12 1 1 0
7 2 1 0
2 3 1 0
7 0 2 0
2 1 2 0
2 0 0 1
Para contar configuraciones de cambio por una cantidad de dinero diferente, o para utilizar un sistema de divisa diferente, cambie los valores de x y coinValues. Por ejemplo, para utilizar la divisa británica, inicialice coinValues en [1 2 5 10 20 25 50].
Ejecutar un gráfico independiente utilizando modelos de Simulink
Puede ejecutar un gráfico de Stateflow independiente desde un modelo de Simulink. Por ejemplo, el modelo sf_change_model contiene dos gráficos de Stateflow que utilizan el gráfico independiente sf_change para contar configuraciones de cambio de 27 centavos en dos sistemas de divisa diferentes. Puede simular el modelo, pero las funciones que ejecutan el gráfico independiente no admiten la generación de código.

Cada gráfico contiene los siguientes estados:
Initializecrea un objeto de gráfico localchartObjque implementa el algoritmo para contar cambio para el valor de entradax.
Executellama a la funciónsteppara ejecutar el gráfico independiente y almacena el resultado como los datos de salidatally.
Finishmuestra los resultados del algoritmo en la ventana de Diagnostic Viewer y establece el valor de los datos de salidadoneentrue.
Cuando ambos gráficos alcanzan su respectivo estado Finish, la simulación del modelo se detiene y los bloques Display muestran los valores finales de los dos recuentos.
Ejecución usando MATLAB como lenguaje de acción
El gráfico MATLAB syntax utiliza MATLAB como lenguaje de acción. Para ejecutar el gráfico de Stateflow independiente, este gráfico debe seguir las siguientes directrices:
La variable local
chartObjque contiene el identificador del objeto de gráfico debe tener el tipoInherit: From definition in chart.
Antes de crear un objeto de gráfico, el estado
Initializedebe llamar a la funcióncoder.extrinsicpara declararsf_changecomo una función extrínseca restringida para la generación de código en Simulink. Consulte Llamar a funciones de MATLAB extrínsecas en gráficos de Stateflow.
Los estados
ExecuteyFinishdeben acceder a los datos locales para el gráfico independiente llamando a la funciónget.

Cuando se simula este gráfico con una entrada de x = 27, el bloque Display Olde English muestra un recuento de 4. La ventana de Diagnostic Viewer muestra los siguientes resultados:
Pennies Shillings Florins
_______ _________ _______
27 0 0
15 1 0
3 2 0
3 0 1Ejecución utilizando C como lenguaje de acción
El gráfico C syntax utiliza C como lenguaje de acción. Para ejecutar el gráfico de Stateflow independiente, este gráfico debe seguir las siguientes directrices:
La variable local
chartObjque contiene el identificador del objeto de gráfico debe tener el tipoml.
El estado
Initializedebe llamar a la funciónmlpara crear el objeto de gráfico.
Los estados
ExecuteyFinishdebe utilizar el operador de espacio de nombresmlpara acceder a las funcionesstep,getydisplpara ejecutar el gráfico independiente, acceder a sus datos locales y mostrar los resultados del algoritmo.
Para obtener más información, consulte Access MATLAB Functions and Workspace Data in C Charts.

Cuando simula este gráfico con una entrada de x = 27, el bloque Display Modern American muestra un recuento de 13. La ventana de Diagnostic Viewer muestra los siguientes resultados:
Safety FieldGoal TouchDown
______ _________ _________
12 1 0
9 3 0
6 5 0
3 7 0
0 9 0
10 0 1
7 2 1
4 4 1
1 6 1
5 1 2
2 3 2
3 0 3
0 2 3