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:
Se pueden mostrar mensajes personalizados durante el proceso de compilación.
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.
La generación de código se puede controlar mediante sentencias condicionales. Por ejemplo, el comportamiento de una variable puede variar en determinadas condiciones.
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 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>)
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 comoEND_VAR
,END_IF
, oEND_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/IL → Insertar 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.
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.