Skip to main content

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 104. Ejemplos

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

ADD

SUB

MUL

DIV

MOD

MOVE

INDEXOF

SIZEOF

XSIZEOF

Operadores de cadenas de bits

AND

OR

XOR

NOT

AND_THEN

OR_ELSE

Operadores de cambio de bits

SHL

SHR

ROL

ROR

Operadores de elección

SEL

MAX

MIN

LIMIT

MUX

operadores de comparación

Los operadores de comparación son operadores booleanos que comparan dos entradas (primer y segundo operando) entre sí.

GT

LT

LE

GE

EQ

NE

operadores de direcciones

ADR

operador de contenido

BITADR

operadores de llamadas

CAL

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.

REAL, LREAL

TIME, LTIME

DATE, DT, TOD, LDATE, LDT, LTOD

STRING, WSTRING

TRUNC

TRUNC_INT

Operadores numéricos

ABS

SQRT

LN

LOG

EXP

EXPT

SIN

ASIN

COS

ACOS

TAN

ATAN

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 global

Espacio de nombres para listas de variables globales

espacio de nombres de enumeración

espacio de nombres de la biblioteca

__POOL

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.

TEST_AND_SET

__COMPARE_AND_SWAP

__XADD

Más operadores

__DELETE

__ISVALIDREF

__NEW

__QUERYINTERFACE

__QUERYPOINTER

INI

__TRY, __CATCH, __FINALLY, __ENDTRY

__POSITION

__POUNAME