Diferencias entre C y MATLAB como sintaxis de lenguaje de acción
Los gráficos de Stateflow® en los modelos de Simulink® tienen una propiedad de lenguaje de acción que define la sintaxis de las acciones de estado y transición. Un icono en la esquina inferior izquierda del área de trabajo del gráfico indica el lenguaje de acción del gráfico.
MATLAB® como lenguaje de acción.
C como lenguaje de acción.
MATLAB es la sintaxis del lenguaje de acción predeterminado de los gráficos nuevos de Stateflow. Para crear un gráfico que utilice C como lenguaje de acción, introduzca:
sfnew -c
Comparar la funcionalidad de los lenguajes de acción
En esta tabla se enumeran las diferencias más significativas de funcionalidad entre los dos lenguajes de acción.
Funcionalidad | MATLAB como lenguaje de acción | C como lenguaje de acción |
---|---|---|
Indexación de matrices y vectores | Indexación de base uno entre paréntesis y comas. Por ejemplo, | Indexación de base cero entre corchetes. Por ejemplo, |
Constructos de C:
| Corrección automática de la sintaxis de MATLAB. Por ejemplo, | Admitido. Consulte Operaciones para datos de Stateflow. |
Instrucciones de control condicional y de bucle en las acciones de estado | Admitido. Por ejemplo, puede utilizar instrucciones | No se admite. Para los patrones condicionales y de bucle, utilice en su lugar funciones gráficas. Consulte Reuse Logic Patterns by Defining Graphical Functions. |
Formato de las acciones de transición | La corrección automática encierra las acciones de transición entre llaves | No es necesario encerrar las acciones de transición entre llaves |
Datos de tamaño variable | Modifica los datos del gráfico de tamaño variable en las acciones de estado y transición. Para obtener más información, consulte Variable-Size Data in Charts That Use MATLAB as the Action Language. | Modifica los datos del gráfico de tamaño variable usando:
Todos los cálculos con datos de tamaño variable deben producirse dentro de estas funciones y no directamente en los estados o las transiciones. Para obtener más información, consulte Variable-Size Data in Charts That Use C as the Action Language. |
Constructos de punto fijo:
| No se admite. | Admitido. Consulte Override Fixed-Point Promotion in C Charts y Fixed-Point Context-Sensitive Constants. |
Datos complejos | Utiliza la notación de números complejos | Utiliza el operador |
Propagación de tipos de datos | Sigue las reglas de escritura de MATLAB. Por ejemplo, si se añaden datos del tipo | Sigue las reglas de escritura de C. Por ejemplo, si se añaden datos del tipo |
Operaciones explícitas de conversión de tipos | Utilice una de estas formas de conversión:
No se admite el operador | Utilice una de estas formas de conversión:
No se admiten palabras clave de tipo para la función |
Expansión escalar | No se admite. | Admitido. Consulte Asignar valores a todos los elementos de una matriz. |
Datos de cadena | Utilice comillas dobles ( | Utilice comillas dobles (" ..." ) o comillas simples (' ...' ). Consulte Manage Textual Information by Using Strings. |
Especificación de propiedades de datos:
| No se admite. | Admitido. Para obtener más información, consulte:
|
Ámbito de los datos en las funciones gráficas, de tablas de verdad y de MATLAB | Constant , Parameter , Input , Output | Local , Constant , Parameter , Input , Output , Temporary |
Notación de puntos para especificar estados, datos locales, mensajes y eventos locales dentro de las funciones de MATLAB | Admitido. Consulte Identify Data by Using Dot Notation. | No se admite. |
Variables y funciones de código personalizado | El comportamiento depende del parámetro de configuración Import Custom Code.
Consulte Reuse Custom Code in Stateflow Charts y Import custom code (Simulink). | Las variables y las funciones de código personalizado son compatibles con los estados y las transiciones. |
Parámetros de estructura | Se admiten parámetros ajustables y no ajustables. | Solo se admiten parámetros ajustables. |
Uso del objeto | Admitido. | No se admite. |
Directrices para utilizar MATLAB como lenguaje de acción
Utilizar la indexación de base uno para vectores y matrices
La indexación de base uno es congruente con la sintaxis de MATLAB. Para obtener más información, consulte Notación de indexación.
Utilizar paréntesis en lugar de corchetes para indexar en vectores y matrices
Esta instrucción es válida:
a(2,5) = 0;
Esta instrucción no es válida:
a[2][5] = 0;
Para obtener más información, consulte Notación de indexación.
Utilizar el formato de MATLAB para los comentarios
Utilice %
para especificar los comentarios en los estados y las transiciones a fin de que sean congruentes con MATLAB. Por ejemplo, el siguiente comentario es válido:
% This is a valid comment in the style of MATLAB
Los comentarios de estilo C, como //
y /* */
, se corrigen automáticamente para utilizar %.
Encierre las acciones de transición entre llaves
Esta etiqueta de transición contiene una acción de transición válida:
E [x > 0] / {x = x+1;}
Esta etiqueta de transición es incorrecta, pero se corrige automáticamente a la sintaxis válida.
E [x > 0] / x = x+1;
No utilizar la lógica de estructuras de control en las acciones de condición y las acciones de transición
Únicamente se admite la lógica de estructuras de control (como las instrucciones if
, switch
, for
y while
) en las acciones de estado. El uso de la lógica de estructuras de control en las acciones de condición o las acciones de transición da lugar a un error de sintaxis.
No declarar variables globales o persistentes en las acciones de estado
No se admiten las palabras clave global
y persistent
en las acciones de estado.
Asignar un valor inicial a los datos locales y de salida
Cuando se utiliza MATLAB como lenguaje de acción, los datos leídos sin un valor inicial provocan un error.
Incluir un prefijo de tipo para los identificadores de valores enumerados
El identificador TrafficColors.Red
es válido, pero Red
no lo es.
Para generar código a partir del modelo, utilizar las características del lenguaje de MATLAB compatibles con la generación de código
De lo contrario, utilice coder.extrinsic
para llamar a funciones no admitidas, lo que proporciona la funcionalidad que desea para la simulación, pero no en el código generado. Para ver una lista de las características y funciones compatibles, consulte Soporte para lenguaje, función y objetos (Simulink).