Skip to main content

Uso de pragmas

Pragma en CODESYS

Un pragma es un texto en el código fuente de la aplicación, entre llaves. Los pragmas se utilizan para insertar sentencias especiales en el código, que el compilador puede evaluar. Esto permite que un pragma influya en las propiedades de una o más variables con respecto a la precompilación o compilación (generación de código). Los pragmas que el compilador no reconoce se pasan como comentario.

La cadena de declaración de un pragma también puede extenderse por varias líneas.

Para obtener más detalles sobre la sintaxis, consulte las descripciones de los pragmas individuales CODESYS.

Hay diferentes pragmas para diferentes propósitos (ejemplo: inicialización de una variable, monitoreo de una variable, agregar una variable a la configuración de símbolos, forzar la visualización de mensajes durante el proceso de compilación y comportamiento de una variable bajo ciertas condiciones).

Importante

Se deben respetar los caracteres mayúsculas y minúsculas.

Categorías de Pragma

Los pragmas CODESYS se dividen en las siguientes categorías:

  • Pragmas de mensajes

    Se pueden mostrar mensajes personalizados durante el proceso de compilación.

  • Pragmas de atributos

    Se puede influir en la compilación y la precompilación. Para ello, existen pragmas con diferentes propósitos, por ejemplo, para la inicialización, la monitorización o la adición de una variable a la configuración del símbolo.

  • Pragmas condicionales

    La generación de código se puede controlar mediante sentencias condicionales. Por ejemplo, el comportamiento de una variable puede variar en determinadas condiciones.

  • Pragma de región

  • Pragmas en POU de prueba

  • Pragmas definidos por el usuario

Sugerencia

En el Propiedades diálogo (Compilar categoría), puede declarar "defines" del compilador que pueden consultarse en pragmas.

Posibles posiciones de inserción

Importante

Pragmas en CODESYS No son implementaciones unívocas de las directivas del preprocesador de C. Debe posicionar un pragma como una sentencia normal. No debe usar un pragma dentro de una expresión.

Puede insertar un pragma para que el compilador lo evalúe en varias posiciones.

. En la declaración
  • En el encabezado de declaración de un POU

    Puede ingresar el pragma deseado directamente en el editor de texto como una línea separada, ya sea como la primera línea del POU o antes de una declaración de variable.

    En la vista tabular, recibirá ayuda al ingresar el pragma. Haga clic en el Editar encabezado de declaración Comando. En el cuadro de diálogo, haga clic en el Atributo botón e ingrese el pragma deseado en el campo de entrada.

  • En una lista de variables globales

Restricción en el caso de pragmas condicionales

Utilice pragmas para la compilación condicional solo en implementaciones de POU. En las declaraciones, estos pragmas se ignoran y no se evalúan.

Tenga en cuenta la siguiente excepción: el pragma IF con el project_defined El operador se puede insertar en las declaraciones. Para más información, consulte el pragma IF con project_defined (<global define>)

. En la implementación de un POU
  • Texto Estructurado (ST)

    En el lenguaje de implementación de ST, un pragma pertenece a una "posición de sentencia". Una posición válida se encuentra al principio de la implementación, en una línea aparte. Otra posición válida se etiqueta después de una sentencia que termina con punto y coma.; " o por palabras clave como END_VAR, END_IF, o END_WHILE.

  • Diagrama de bloques de funciones (FBD) o diagrama de escalera (LD)

    En los lenguajes de implementación del editor FBD/LD/IL, un pragma pertenece a una posición que también es adecuada para una etiqueta. Puede introducir el pragma como si fuera una etiqueta. Para ello, seleccione el comando FBD/LD/ILInsertar etiqueta Luego, en el campo de texto de la etiqueta, reemplace el texto predeterminado Label: Con el pragma deseado. Para usar un pragma además de una etiqueta, primero se especifica el pragma y luego la etiqueta.

ejemplo 17. Ejemplo

Para posiciones incorrectas y correctas para un pragma condicional

PROGRAM PRG_ConditionalPragma
VAR
    strTest : STRING := 'b';
    iResult : INT := 0;
END_VAR

Incorrecto

{IF defined(DEFINE_A)}
IF strTest = 'a' THEN
{ELSE}
IF strTest = 'b' THEN
{END_IF}
    iResult := {IF defined(DEFINE_B)} 12; {ELSE} 13; {END_IF}
END_IF

Correcto

{IF defined(DEFINE_A)}
IF strTest = 'a' THEN
    {IF defined(DEFINE_B)}
    iResult := 16#A;
    {ELSE}
    iResult := 16#AA;
    {END_IF}
END_IF
{ELSE}
IF strTest = 'b' THEN
    {IF defined(DEFINE_B)}
    iResult := 16#B;
    {ELSE}
    iResult := 16#BB;
    {END_IF}
END_IF
{END_IF}


Alcance

Dependiendo del tipo y contenido de un pragma, puede influir en lo siguiente:

  • Declaraciones posteriores

  • Exactamente la siguiente declaración

  • Todas las declaraciones posteriores hasta que sea cancelada por un pragma correspondiente

  • Todas las sentencias subsiguientes hasta que se ejecute el mismo pragma con otros parámetros o se llegue al final del código. En este contexto, "código" se refiere a la parte de declaración, la parte de implementación, la lista de variables globales y la declaración de tipo. Por lo tanto, un pragma influye en todo el objeto cuando aparece solo en la primera línea de la parte de declaración y no es reemplazado ni cancelado por otro pragma.