Operadores
CODESYS V3 es compatible con todos los operadores del estándar IEC-61131-3. Estos operadores se conocen implícitamente a lo largo del proyecto. Admitido además de los operadores IEC CODESYS también algunos operadores que no están descritos en la norma IEC 61131-3.
Los operadores se utilizan en un bloque de construcción como funciones.
Sugerencia
La información sobre el orden de procesamiento (fuerza de enlace) de los operadores ST se puede encontrar en el capítulo "Expresiones ST".
Atención
Para operaciones con tipos de punto flotante, el resultado del cálculo depende del hardware del sistema de destino utilizado.
Atención
En el caso de operaciones con desbordamiento o subdesbordamiento en el tipo de datos, el resultado del cálculo depende del hardware del sistema de destino utilizado.
Desbordamiento/subdesbordamiento en el tipo de datos
el CODESYS-El compilador genera código para el dispositivo de destino respectivo y siempre calcula los resultados intermedios con el tamaño nativo especificado por el sistema de destino. Por ejemplo, en los sistemas x86 y ARM, los cálculos se realizan con valores intermedios de al menos 32 bits, y en los sistemas x64, siempre con valores intermedios de 64 bits. Esto ofrece ventajas significativas en términos de velocidad computacional y, a menudo, produce el resultado esperado. Sin embargo, esto también significa que no se puede truncar un desbordamiento o subdesbordamiento en el tipo de datos.
Ejemplo 1
El resultado de esta suma no se trunca y el resultado en dwVar
es 65536
.
VAR wVar : WORD; dwVar: DWORD; END_VAR wVar := 65535; dwVar := wVar + 1;
Ejemplo 2
El desbordamiento y subdesbordamiento en el tipo de datos no se trunca y los resultados (bVar1, bVar2
) ambas comparaciones son en hardware de 32 y 64 bits FALSE
.
VAR wVar1 : WORD; wVar2 : WORD; bVar1 : BOOL; bVar2 : BOOL; END_VAR wVar1 := 65535; wVar2 := 0; bVar1 := (wVar1 + 1) = wVar2; bVar2 := (wVar2 - 1) = wVar1;
Ejemplo 3
Al asignar a wVar3
el valor se convierte en el tipo de datos de destino WORD
truncado y el resultado bvar1
es TRUE
.
VAR wVar1 : WORD; wVar2 : WORD; wVar3 : WORD; bVar1 : BOOL; END_VAR wVar1 := 65535; wVar2 := 0; wVar3 := (wVar1 + 1); bVar1 := wVar3 = wVar2;
Ejemplo 4
Se puede insertar una conversión para obligar al compilador a truncar el resultado intermedio.
La conversión de tipos asegura que ambas comparaciones solo comparen 16 bits y los resultados (bVar1, bVar2
) de ambas comparaciones respectivamente TRUE
son.
VAR wVar1 : WORD; wVar2 : WORD; bVar1 : BOOL; bVar2 : BOOL; END_VAR wVar1 := 65535; wVar2 := 0; bVar1 := TO_WORD(wVar1 + 1) = wVar2; bVar2 := TO_WORD(wVar2 - 1) = wVar1;
Operadores aritméticos
Operadores de cadenas de bits
Operadores de cambio de bits
Operadores de elección
operadores de comparación
Los operadores de comparación son operadores booleanos que comparan dos entradas (primer y segundo operando) entre sí.
operadores de direcciones
operadores de llamadas
Operadores de conversión de tipo
Puede llamar explícitamente a los operadores de conversión de tipos. Los operadores de conversión de tipo que se describen a continuación están disponibles para conversiones tipificadas de un tipo elemental a otro tipo elemental y también para sobrecargas. Conversiones de un tipo "más grande" a un tipo "más pequeño", como de INT
después BYTE
o de DINT
después WORD
, pero también son implícitamente posibles.
Conversión mecanografiada: <elementary data type> _TO_ <another elementary data type>
Conversión sobrecargada: TO_ <elementary data type>
Tipos de datos elementales
<elementary data type> = __UXINT | __XINT | __XWORD | BIT | BOOL | BYTE | DATE | DATE_AND_TIME | DINT | DT | DWORD | INT | LDATE | LDATE_AND_TIME | LDT | LINT | LREAL | LTIME | LTOD | LWORD | REAL | SINT | TIME | TOD | UDINT | UINT | ULINT | USINT | WORD
las palabras clave T
, TIME_OF_DAY
y DATE_AND_TIME
son notaciones alternativas para los tipos de datos TIME
, TOD
y DT
. T
, TIME_OF_DAY
y DATE_AND_TIME
no se asignan como un comando de conversión de tipo.
Importante
Si el valor del operando de un operador de conversión de tipos está fuera del rango de valores del tipo de datos de destino, la salida del resultado depende del tipo de procesador y, por lo tanto, no está definida. Este es el caso, por ejemplo, cuando un valor de operando negativo de LREAL
en el tipo de datos de destino UINT
Está convertido.
La información se puede perder durante la conversión de tipo de tipos más grandes a más pequeños.
Manipulación de cadenas al convertir a STRING
o WSTRING
Con una conversión de tipo a STRING
o WSTRING
el valor escrito se almacena justificado a la izquierda como una cadena de caracteres y se trunca si es demasiado largo. Por lo tanto, declare las variables de retorno para los operadores de conversión de tipo <>_TO_STRING
y <>_TO_WSTRING
lo suficientemente largo para acomodar la cuerda sin manipulación.
Operadores numéricos
Operadores de espacio de nombres
Los operadores de espacio de nombres son una extensión de los operadores IEC 61131-3. Le ofrecen oportunidades para hacer que el acceso a variables o módulos sea único, incluso si usa el mismo nombre de variable o módulo varias veces en el proyecto.
Espacio de nombres para listas de variables globales
espacio de nombres de enumeración
Operadores multinúcleo
Trabajar con diferentes tareas requiere la sincronización de estas tareas. Esto se aplica en mayor medida cuando se trabaja en plataformas multinúcleo. Para soportar esta sincronización proporciona CODESYS algunos operadores especiales.
Estos operadores son extensiones de IEC-61131-3. los operadores TEST_AND_SET
y __COMPARE_AND_SWAP
se utilizan para tareas similares.