Instrucciones TIA Portal

Operaciones de Comparación
Lógica de decisión y Rangos

La comparación de valores es el motor de la lógica de decisión industrial. Domine los comparadores estándar, las pruebas de rango y las verificaciones de validez.

¿Qué son las operaciones de comparación en TIA Portal?

Las operaciones de comparación permiten comparar dos valores del mismo tipo de datos (Enteros, Reales, Tiempo, etc.) o verificar si un valor se encuentra dentro o fuera de un rango definido. Son fundamentales para crear umbrales de alarma, condiciones de transición y bucles de regulación.

TIA Portal ofrece comparadores estándar (==, <>, >=, etc.), instrucciones de rango (IN_Range, OUT_Range), pruebas de validez para números de coma flotante e instrucciones avanzadas para tipos de datos Variant y punteros DB.

Comparadores Estándar

Evaluación de la igualdad y desigualdades entre dos operandos

CMP == — Igual (Equal)

==

Qué hace

Compara dos operandos (IN1 e IN2). Si IN1 es igual a IN2, la instrucción devuelve TRUE. Admite casi todos los tipos de datos simples.

Cuándo usarlo

Verificar si un contador ha alcanzado su objetivo, si una consigna HMI coincide con el valor actual, o si un estado de máquina específico está activo.

Consejos Pro

Atención con los tipos Real: la igualdad estricta puede fallar debido a la precisión. Prefiera un margen o rango.

En SCL: IF value1 = value2 THEN ...

Puede comparar cadenas de caracteres (String) para verificar códigos de identificación.

CMP <> — Diferente (Not equal)

<>

Qué hace

Devuelve TRUE si ambos operandos IN1 e IN2 son diferentes. Es lo inverso a la igualdad.

Cuándo usarlo

Detectar un cambio de valor, asegurarse de que un sensor no devuelva 0, o verificar que un modo de funcionamiento no sea el prohibido.

Consejos Pro

A menudo se utiliza para activar una acción en cuanto un valor se desvía de su consigna.

En SCL: IF value1 <> value2 THEN ...

Puede usarse para comparar marcas de tiempo (DTL) para ver si una fecha ha cambiado.

CMP >= — Mayor o igual

>=

Qué hace

Devuelve TRUE si el primer valor (IN1) es mayor o igual que el segundo (IN2).

Cuándo usarlo

Activar una alarma de nivel alto, permitir el calentamiento mientras no se alcance una temperatura.

Consejos Pro

Ideal para umbrales de seguridad donde el valor límite debe incluirse en la condición.

En SCL: IF level >= setpoint THEN ...

Puede usarse con tipos Time para verificar si ha transcurrido una duración mínima.

CMP <= — Menor o igual

<=

Qué hace

Devuelve TRUE si IN1 es menor o igual que IN2.

Cuándo usarlo

Monitoreo de bajo nivel, parada de una bomba, validación de una presión mínima.

Consejos Pro

A menudo se acopla a una histéresis para evitar rebotes en la salida.

Funciona de forma nativa con tipos Date y Time.

En SCL: IF pressure <= min_limit THEN ...

CMP > — Mayor (Greater than)

>

Qué hace

Devuelve TRUE si IN1 es estrictamente mayor que IN2.

Cuándo usarlo

Comparación estricta que no debe incluir el valor objetivo.

Consejos Pro

Menos utilizado que >= en automatización, pero útil para algoritmos matemáticos.

En SCL: IF current > max THEN ...

Preferible para comparaciones de índices de bucles (FOR).

CMP < — Menor (Less than)

<

Qué hace

Devuelve TRUE si IN1 es estrictamente menor que IN2.

Cuándo usarlo

Pruebas de límites inferiores estrictos.

Consejos Pro

Útil para verificar si un valor es 'negativo' (val < 0).

En SCL: IF val < 0 THEN ...

Funciona con caracteres (orden alfabético).

Operaciones de Rango

Verificación de pertenencia a un intervalo [MIN..MAX]

IN_Range — Dentro del rango

IN_Range

Qué hace

Verifica si un valor (VAL) se encuentra entre un límite mínimo (MIN) y un límite máximo (MAX). El intervalo es cerrado: MIN <= VAL <= MAX.

Cuándo usarlo

Monitoreo de ventana de funcionamiento (ej: presión entre 2 y 5 bares), validación de velocidad de máquina.

Consejos Pro

Reemplaza ventajosamente a dos comparadores puestos en serie, haciendo el segmento más legible.

Si MIN > MAX, la instrucción siempre devuelve FALSE.

Muy útil para enclavamientos 'Ready to Run' que exigen varias condiciones analógicas.

OUT_Range — Fuera de rango

OUT_Range

Qué hace

Devuelve TRUE si el valor (VAL) está fuera del intervalo definido por MIN y MAX. Ya sea VAL < MIN o VAL > MAX.

Cuándo usarlo

Detección de anomalía o superación de umbrales extremos (alarma de rango).

Consejos Pro

Es el inverso exacto de IN_Range.

Úselo para simplificar la lógica de alarma de proceso.

En SCL: res := (val < min) OR (val > max);

Pruebas de Validez

Verificación de la integridad de números de coma flotante

|OK| — Verificar validez

|OK|

Qué hace

Verifica si un valor flotante (Real o LReal) es un número válido. Devuelve FALSE si el valor es NaN (Not a Number) o Inf (Infinito).

Cuándo usarlo

Después de cálculos complejos (divisiones, raíces cuadradas, log) para evitar propagar errores matemáticos que podrían detener el PLC.

Consejos Pro

Indispensable antes de enviar un valor Real a una salida analógica o un variador.

Permite detectar una división por cero indirecta.

Práctico para filtrar retornos de sensores defectuosos.

|NOT_OK| — Verificar invalidez

|NOT_OK|

Qué hace

Devuelve TRUE si el valor flotante es inválido (NaN o Inf).

Cuándo usarlo

Activar un bit de fallo de cálculo o forzar un valor de seguridad.

Consejos Pro

Úselo para poner su máquina en seguridad si falla un cálculo de trayectoria.

Es el equivalente a IS_NAN en otros lenguajes.

En SCL: IF NOT OK(value) THEN ...

Comparaciones avanzadas (Variant)

Instrucciones para la programación dinámica y tipos complejos

EQ_Type / NE_Type

Qué hace

Compara el tipo de datos de una variable de tipo Variant con el de otra variable o un tipo definido.

Cuándo usarlo

En bloques genéricos que deben procesar diferentes tipos de datos (ej: un bloque de log que acepta Int o Real).

Consejos Pro

Esencial para la programación orientada a objetos y bibliotecas reutilizables.

Permite asegurar los accesos a memoria dinámicos.

Usado con la instrucción VariantGet.

IS_NULL / NOT_NULL

Qué hace

Verifica si un puntero (Variant o DB_ANY) es nulo (no apunta a nada).

Cuándo usarlo

Evitar errores de acceso al usar DB direccionados indirectamente.

Consejos Pro

Siempre pruebe NOT_NULL antes de llamar a un método o leer un dato mediante un puntero.

Equivalente al objeto 'Nothing' o 'null' en C#/Java.

Indispensable para la gestión de listas enlazadas o estructuras dinámicas en PLC.

IS_ARRAY

Qué hace

Verifica si una variable Variant apunta a una matriz (Array).

Cuándo usarlo

Programación de funciones de procesamiento por lotes o buffers de datos.

Consejos Pro

Combínelo con CountOfElements para conocer el tamaño de la matriz.

Permite crear funciones de ordenación universales.

También funciona para matrices de estructuras (UDT).

Comparativa de comparadores — ¿Cuál usar?

Elegir la instrucción adecuada para su lógica PLC

Usted quiere...Use estoEjemplo
Probar la igualdad exactaCMP ==Código de producto correcto
Umbral de seguridad altoCMP >=Presión > 10 bar
Mantener en una zonaIN_RangeTemp entre 18 y 24°C
Monitorear errores Real|OK|Verificar resultado división
Verificar un puntero DBNOT_NULLDB de receta cargado
Verificar un tipo VariantEQ_TypeLa entrada es Int

Preguntas Frecuentes

¿Por qué mi comparación == falla a veces con números Real?

Los números Real (coma flotante) tienen una precisión limitada. Un cálculo puede dar 10.000001 en lugar de 10.0. Use siempre IN_Range con una pequeña tolerancia (ej: entre 9.99 e 10.01) para comparar valores flotantes.

¿Cuál es la diferencia entre IN_Range y dos comparadores puestos en serie?

Funcionalmente es idéntico. Sin embargo, IN_Range es gráficamente más compacto, más fácil de leer y más eficiente ya que el PLC procesa la instrucción en un solo paso.

¿Para qué sirven las instrucciones |OK| y |NOT_OK|?

Sirven para detectar errores 'silenciosos' en los cálculos Real. Si hace una raíz cuadrada de un número negativo, el resultado es NaN. Sin la prueba |OK|, este NaN contaminará todos sus otros cálculos y puede provocar una parada de la CPU.

¿Se pueden comparar estructuras completas (UDT)?

La instrucción CMP == no permite comparar directamente dos estructuras. Debe comparar cada miembro individualmente o usar un bloque específico que compare las zonas de memoria.

Genere su lógica de comparación por IA

Describa sus umbrales y condiciones en lenguaje natural, T-IA Connect generará los segmentos de comparación optimizados con gestión de errores.