Contenido principal

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.

Integrar estructuras personalizadas en gráficos de Stateflow

Este ejemplo muestra cómo usar estructuras de código personalizadas en un gráfico de Stateflow®. Puede definir los datos estructurados en código C e integrarlos con las estructuras de Stateflow y los buses de Simulink®. Compartir los datos con código personalizado permite aumentar las prestaciones admitidas por Stateflow y aprovechar el código existente. Para obtener más información, consulte Reuse Custom Code in Stateflow Charts.

En este ejemplo, un gráfico de Stateflow procesa datos de un bus de Simulink y envía el resultado a otro bus de Simulink. El objeto Simulink.Bus (Simulink) COUNTERBUS define los buses de entrada y salida. En el gráfico, los buses de Simulink interactúan con las estructuras de Stateflow inbus y outbus. El gráfico llama a una función de código C personalizado para escribir en la estructura de salida outbus.

Definir estructuras personalizadas en código C

1. En el código C, defina una estructura creando un archivo de encabezado personalizado. El archivo de encabezado contiene declaraciones typedef que definen las propiedades de la estructura personalizada. Por ejemplo, en este modelo, el archivo de encabezado counterbus.h declara tres estructuras personalizadas:

...
typedef struct {
    int input;
} SIGNALBUS;
typedef struct {
    int upper_saturation_limit;
    int lower_saturation_limit;
} LIMITBUS;
typedef struct {
    SIGNALBUS inputsignal;
    LIMITBUS limits;
} COUNTERBUS;
...

2. En el editor de tipos, defina un objeto Simulink.Bus que coincida con cada declaración typedef de estructura personalizada. En el campo Header file de cada objeto Simulink.Bus, introduzca el nombre del archivo de encabezado que contiene la declaración typedef correspondiente.

3. Configure el gráfico de Stateflow para incluir código C personalizado, como se describe en Configure Custom Code.

4. Construya y ejecute el modelo.

Pasar estructuras de Stateflow a código personalizado

Cuando llame a funciones de código personalizado que utilizan punteros a estructura como argumentos, pase las estructuras de Stateflow usando su dirección de memoria. Para pasar la dirección de una estructura de Stateflow o de uno de sus campos a una función personalizada, utilice el operador & y la notación de puntos:

  • &outbus proporciona la dirección de la estructura de Stateflow outbus.

  • &outbus.inputsignal proporciona la dirección de la subestructura inputsignal de la estructura outbus.

  • &outbus.inputsignal.input proporciona la dirección del campo input de la subestructura outbus.inputsignal.

Para obtener más información, consulte Index and Assign Values to Stateflow Structures.

En este caso, el ejemplo contiene una función de C personalizada counterbusFcn que admite punteros a estructura como argumentos. El archivo de encabezado counterbus.h contiene la siguiente declaración de función:

extern void counterbusFcn(COUNTERBUS *u1, int u2, COUNTERBUS *y1, int *y2);

El gráfico pasa las direcciones a las estructuras de Stateflow counterbus_struct y outbus usando la siguiente llamada a función:

counterbusFcn(&counterbus_struct, u2, &outbus, &y2);

La función lee el valor de la entrada del gráfico u2 y la estructura local counterbus_struct. Escribe en la salida del gráfico y2 y en la estructura de salida outbus.

Limitaciones de bus para código personalizado

No puede importar un bus definido en código personalizado si el bus contiene arreglos multidimensionales.

Para utilizar buses que contienen arreglos multidimensionales en código personalizado, defina el bus en Stateflow y pase el bus al código personalizado.

Consulte también

(Simulink)

Temas