Main Content

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.

Crear gráficos utilizando la API de Stateflow

Este ejemplo muestra cómo crear un gráfico de Stateflow® utilizando la interfaz de programación de aplicaciones (API) de Stateflow. La API de Stateflow es una herramienta para crear o modificar gráficos de Stateflow mediante los comandos de MATLAB®. Para obtener más información, consulte Overview of the Stateflow API.

Crear un gráfico de Stateflow

Este gráfico de Stateflow presenta la lógica detrás de un rectificador de media onda. El gráfico contiene dos estados con las etiquetas On y Off. En el estado On, la señal de salida del gráfico y es igual a la entrada x. En el estado Off, la señal de salida se establece en cero. Cuando la señal de entrada cruza cierto umbral t0, el gráfico cambia entre estos estados. Las acciones de cada estado actualizan el valor de y en cada unidad de tiempo de la simulación.

Stateflow chart with two states.

Para obtener más información sobre cómo simular este gráfico, consulte Crear y ejecutar un gráfico de Stateflow.

1. Cree un modelo de Simulink® denominado rectify que contenga un bloque Chart de Stateflow vacío.

sfnew rectify

2. Acceda al objeto Stateflow.Chart que se corresponde con el gráfico del modelo llamando a la función find. Utilice la función sfroot para acceder al objeto Simulink.Root, que es el objeto principal de todos los objetos de la API de Stateflow.

ch = find(sfroot,"-isa","Stateflow.Chart", ...
    Path="rectify/Chart");

3. Abra el gráfico en el editor de Stateflow llamando a la función view.

view(ch);

4. Cambie el lenguaje de acción modificando la propiedad ActionLanguage del gráfico.

ch.ActionLanguage = "C";

Añadir estados

Para crear un objeto de API de Stateflow como el objeto secundario de un objeto principal, utilice el objeto principal como el argumento de entrada para una función que crea el objeto secundario. Para obtener más información, consulte Create and Delete Stateflow Objects.

1. Llame a la función Stateflow.State para añadir un estado al gráfico.

s1 = Stateflow.State(ch);

2. Ajuste la posición del estado cambiando la propiedad Position del objeto State correspondiente. Especifique la posición nueva como un vector de cuatro elementos en el que los dos primeros valores son las coordenadas (x,y) de la esquina superior izquierda y los dos últimos valores son la anchura y la altura del estado.

s1.Position = [30 30 90 60];

3. Especifique el nombre y la etiqueta del estado cambiando la propiedad LabelString, tal como se describe en Specify Labels in States and Transitions Programmatically.

s1.LabelString = "On"+newline+"y = x;";

Chart with one state, On.

4. Cree un segundo estado. Ajuste la posición y especifique el nombre y la etiqueta.

s2 = Stateflow.State(ch);
s2.Position = [230 30 90 60];
s2.LabelString = "Off"+newline+"y = 0;";

Chart with two states, On and Off.

Añadir transiciones

Cuando se añade una transición, se debe especificar su origen y destino modificando las propiedades Source y Destination. En una transición predeterminada, se especifica un destino, pero no un origen.

1. Llame a la función Stateflow.Transition para añadir una transición al gráfico.

t1 = Stateflow.Transition(ch);

2. Establezca el origen y el destino de la transición.

t1.Source = s1;
t1.Destination = s2;

3. Ajuste la posición de la transición modificando la propiedad SourceOClock.

t1.SourceOClock = 2.1;

4. Especifique la etiqueta de transición y la posición cambiando las propiedades LabelString y LabelPosition.

t1.LabelString = "[x<t0]";
t1.LabelPosition= [159 23 31 16];

Chart with the two states joined by a transition.

5. Cree una segunda transición. Especifique el origen, el destino y la etiqueta.

t2 = Stateflow.Transition(ch);
t2.Source = s2;
t2.Destination = s1;
t2.SourceOClock = 8.1;
t2.LabelString = "[x>=t0]";
t2.LabelPosition= [155 81 38 16];

Charts with the two states joined by two transitions.

6. Añada una transición predeterminada al estado On. Para realizar una transición vertical, modifique los valores de las propiedades SourceEndpoint y Midpoint. Para obtener más información, consulte Add a Default Transition.

t0 = Stateflow.Transition(ch);
t0.Destination = s1;
t0.DestinationOClock = 0;
t0.SourceEndpoint = t0.DestinationEndpoint-[0 30];
t0.Midpoint = t0.DestinationEndpoint-[0 15];

Chart with a default transition connected to state On.

Añadir datos

Antes de poder simular el gráfico, debe definir cada símbolo de datos que se usa en el gráfico y especificar su ámbito y tipo.

1. Llame a la función Stateflow.Data para añadir un objeto de datos que represente la entrada al gráfico.

x = Stateflow.Data(ch);

2. Especifique el nombre del objeto de datos como x y su ámbito como Input.

x.Name = "x";
x.Scope = "Input";

3. Para especificar que la entrada x tiene el tipo double, establezca la propiedad Props.Type.Method en Built-in. El tipo de datos integrado de forma predeterminada es double.

x.Props.Type.Method = "Built-in";
x.DataType
ans = 
'double'

4. Añada un objeto de datos que represente la salida del gráfico. Especifique el nombre como y y el ámbito como Output.

y = Stateflow.Data(ch);
y.Name = "y";
y.Scope = "Output";

5. Para especificar que la salida y tiene el tipo single, establezca la propiedad Props.Type.Method en Built-in y la propiedad DataType en single.

y.Props.Type.Method = "Built-in";
y.DataType = "single";
y.DataType
ans = 
'single'

6. Añada un objeto de datos que represente el umbral de transición del gráfico. Especifique el nombre como t0 y el ámbito como Constant. Establezca el valor inicial en 0.

t0 = Stateflow.Data(ch);
t0.Name = "t0";
t0.Scope = "Constant";
t0.Props.InitialValue = "0";

7. Para especificar que el umbral t0 tiene un tipo de datos de punto fijo, establezca la propiedad Props.Type.Method en Fixed-point. Después, especifique los valores de las propiedades Props.Type que se aplican a datos de punto fijo.

t0.Props.Type.Method = "Fixed point";
t0.Props.Type.Signed = true;
t0.Props.Type.WordLength = "5";
t0.Props.Type.Fixpt.ScalingMode = "Binary point";
t0.Props.Type.Fixpt.FractionLength = "2";
t0.DataType
ans = 
'fixdt(1,5,2)'

Guardar y simular el gráfico

Para guardar el modelo que contiene el gráfico completo, llame a la función sfsave.

sfsave

Para simular el gráfico, conéctelo a otros bloques del modelo de Simulink a través de puertos de entrada y de salida.

In a Simulink model, a Sine Wave block creates an input signal for the chart. A Scope block plots the input and output of the chart.

Para obtener más información, consulte Simular el gráfico como un bloque de Simulink.

Consulte también

Bloques

Funciones

Objetos

Temas relacionados