Main Content

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.

FuncionalidadMATLAB como lenguaje de acciónC como lenguaje de acción

Indexación de matrices y vectores

Indexación de base uno entre paréntesis y comas. Por ejemplo, A(4,5). Consulte Operaciones para vectores y matrices en Stateflow.

Indexación de base cero entre corchetes. Por ejemplo, A[3][4]. Consulte Operaciones para vectores y matrices en Stateflow.

Constructos de C:

  • Operaciones de aumento y disminución a++ y a--

  • Operaciones de asignación a += b, a –= b, a *= b y a /= b

  • Operaciones de evaluación a != b y !a

  • Operaciones binarias a %% b, a >> b, a << b, a & b y a | b

  • Marcadores de comentarios // y /* */

Corrección automática de la sintaxis de MATLAB. Por ejemplo, a++ se corrige como a = a+1. Consulte Corrección automática al utilizar MATLAB como lenguaje de acción.

Admitido. Consulte Operations for Stateflow Data.

Instrucciones de control condicional y de bucle en las acciones de estado

Admitido. Por ejemplo, puede utilizar instrucciones if, for y while en las acciones de estado. Consulte Bucles e instrucciones condicionales.

No admitido. 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 {}. Consulte Transition Actions.

No es necesario encerrar las acciones de transición entre llaves {}. Consulte Transition Actions.

Ordenación de estados paralelos

Únicamente ordenación explícita. Consulte Execution Order for Parallel States.

Ordenación explícita o implícita. Consulte Execution Order for Parallel States.

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:

  • Funciones de MATLAB

  • Funciones de Simulink

  • Tablas de verdad que utilizan MATLAB como lenguaje de acción

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:

  • Operador de asignación especial :=

  • Constantes susceptibles al contexto, como 4.3C

No admitido.

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 a + bi o el operador complex. Consulte Operations for Complex Data in Stateflow.

Utiliza el operador complex. No se admite la notación de números complejos. Consulte Operations for Complex Data in Stateflow.

Propagación de tipos de datos

Sigue las reglas de escritura de MATLAB. Por ejemplo, si se añaden datos del tipo double a datos del tipo int32, se obtienen datos del tipo int32.

Sigue las reglas de escritura de C. Por ejemplo, si se añaden datos del tipo double a datos del tipo int32, se obtienen datos del tipo double.

Operaciones explícitas de conversión de tipos

Utilice una de estas formas de conversión:

  • Función de conversión de tipos de MATLAB. Por ejemplo, single(x).

  • Función cast con una palabra clave de tipo. Por ejemplo, cast(x,"int8").

  • Función cast con la palabra clave "like". Por ejemplo, cast(x,"like",z).

No se admite el operador type. Consulte Type Cast Operations.

Utilice una de estas formas de conversión:

  • Función de conversión de tipos de MATLAB. Por ejemplo, uint16(x).

  • Función cast con el operador type. Por ejemplo, cast(x,type(z)).

No se admiten palabras clave de tipo para la función cast. Consulte Type Cast Operations.

Expansión escalar

No admitido.

Admitido. Consulte Asignar valores a todos los elementos de una matriz.
Datos de cadena

Utilice comillas dobles ("..."). Consulte Manage Textual Information by Using Strings.

Utilice comillas dobles ("...") o comillas simples ('...'). Consulte Manage Textual Information by Using Strings.

Especificación de propiedades de datos:

  • Primer índice

  • Guardar el valor final en el área de trabajo base

  • Unidades

No admitido.

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, OutputLocal, 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 admitido.

Variables y funciones de código personalizado

El comportamiento depende del parámetro de configuración Import Custom Code.

  • Cuando se activa Import Custom Code, tanto las variables como las funciones de código personalizado son compatibles con los estados y las transiciones (predeterminadas).

  • Cuando se desactiva Import Custom Code, solo se admiten las funciones de código personalizado. Utilice la función coder.ceval (MATLAB Coder).

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 fimath global

Admitido.

No admitido.

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 coherente 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 mantener la coherencia 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).

Consulte también

Temas relacionados