Instruções TIA Portal

Operações de Comparação
Lógica de decisão e Intervalos

A comparação de valores é o motor da lógica de decisão industrial. Domine os comparadores padrão, os testes de intervalo e as verificações de validade.

O que são operações de comparação no TIA Portal?

As operações de comparação permitem comparar dois valores do mesmo tipo de dados (Inteiros, Reais, Tempo, etc.) ou verificar se un valor se situa dentro ou fora de um intervalo definido. São fundamentais para criar limiares de alarme, condições de transição e malhas de regulação.

O TIA Portal oferece comparadores padrão (==, <>, >=, etc.), instruções de intervalo (IN_Range, OUT_Range), testes de validade para números de vírgula flutuante e instruções avançadas para tipos de dados Variant e ponteiros DB.

Comparadores Padrão

Avaliação da igualdade e desigualdades entre dois operandos

CMP == — Igual (Equal)

==

O que faz

Compara dois operandos (IN1 e IN2). Se IN1 for igual a IN2, a instrução devolve TRUE. Suporta quase todos os tipos de dados simples.

Quando usar

Verificar se um contador atingiu o seu objetivo, se um setpoint HMI corresponde ao valor atual, ou se um estado específico da máquina está ativo.

Dicas Pro

Atenção com os tipos Real: a igualdade estrita pode falhar devido à precisão. Prefira uma margem ou intervalo.

Em SCL: IF value1 = value2 THEN ...

Pode comparar cadeias de caracteres (String) para verificar códigos de identificação.

CMP <> — Diferente (Not equal)

<>

O que faz

Devolve TRUE se ambos os operandos IN1 e IN2 forem diferentes. É o inverso da igualdade.

Quando usar

Detetar uma alteração de valor, assegurar que um sensor não devolve 0, ou verificar que um modo de funcionamento não é o proibido.

Dicas Pro

Frequentemente utilizado para disparar uma ação assim que um valor se desvia do seu setpoint.

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

Pode ser usado para comparar timestamps (DTL) para ver se uma data mudou.

CMP >= — Maior ou igual

>=

O que faz

Devolve TRUE se o primeiro valor (IN1) for maior ou igual ao segundo (IN2).

Quando usar

Disparar um alarme de nível alto, permitir o aquecimento enquanto uma temperatura não for atingida.

Dicas Pro

Ideal para limiares de segurança onde o valor limite deve ser incluído na condição.

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

Pode ser usado com tipos Time para verificar se decorreu uma duração mínima.

CMP <= — Menor ou igual

<=

O que faz

Devolve TRUE se IN1 for menor ou igual a IN2.

Quando usar

Monitorização de baixo nível, paragem de uma bomba, validação de uma pressão mínima.

Dicas Pro

Muitas vezes acoplado a uma histerese para evitar oscilações na saída.

Funciona nativamente com os tipos Date e Time.

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

CMP > — Maior (Greater than)

>

O que faz

Devolve TRUE se IN1 for estritamente maior que IN2.

Quando usar

Comparação estrita que não deve incluir o valor alvo.

Dicas Pro

Menos usado que >= em automação, mas útil para algoritmos matemáticos.

Em SCL: IF current > max THEN ...

Preferível para comparações de índices de ciclos (FOR).

CMP < — Menor (Less than)

<

O que faz

Devolve TRUE se IN1 for estritamente menor que IN2.

Quando usar

Testes de limites inferiores estritos.

Dicas Pro

Útil para verificar se um valor está 'no negativo' (val < 0).

Em SCL: IF val < 0 THEN ...

Funciona com caracteres (ordem alfabética).

Operações de Intervalo

Verificação de pertença a um intervalo [MIN..MAX]

IN_Range — Dentro do intervalo

IN_Range

O que faz

Verifica se um valor (VAL) se encontra entre um limite mínimo (MIN) e um limite máximo (MAX). O intervalo é fechado: MIN <= VAL <= MAX.

Quando usar

Monitorização de janela de funcionamento (ex: pressão entre 2 e 5 bar), validação de velocidade da máquina.

Dicas Pro

Substitui vantajosamente dois comparadores colocados em série, tornando o segmento mais legível.

Se MIN > MAX, a instrução devolve sempre FALSE.

Muito útil para os 'Ready to Run' que exigem várias condições analógicas.

OUT_Range — Fora do intervalo

OUT_Range

O que faz

Devolve TRUE se o valor (VAL) estiver fora do intervalo definido por MIN e MAX. Ou VAL < MIN, ou VAL > MAX.

Quando usar

Deteção de anomalia ou superação de limiares extremos (alarme de intervalo).

Dicas Pro

É o inverso exato de IN_Range.

Use-o para simplificar a lógica de alarme de processo.

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

Testes de Validatde

Verificação da integridade dos números de vírgula flutuante

|OK| — Verificar validade

|OK|

O que faz

Verifica se um valor flutuante (Real ou LReal) é um número válido. Devolve FALSE se o valor for NaN (Not a Number) ou Inf (Infinito).

Quando usar

Após cálculos complexos (divisões, raízes quadradas, log) para evitar propagar erros matemáticos que poderiam parar o PLC.

Dicas Pro

Indispensável antes de enviar um valor Real para uma saída analógica ou um variador.

Permite detetar uma divisão por zero indireta.

Prático para filtrar os retornos de sensores avariados.

|NOT_OK| — Verificar invalidade

|NOT_OK|

O que faz

Devolve TRUE se o valor flutuante for inválido (NaN ou Inf).

Quando usar

Ativar um bit de falha de cálculo ou forçar um valor de segurança.

Dicas Pro

Use-o para colocar a sua máquina em segurança se um cálculo de trajetória falhar.

É o equivalente a IS_NAN noutras linguagens.

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

Comparações avançadas (Variant)

Instruções para programação dinâmica e tipos complexos

EQ_Type / NE_Type

O que faz

Compara o tipo de dados de uma variável de tipo Variant com o de outra variável ou de um tipo definido.

Quando usar

Em blocos genéricos que devem processar diferentes tipos de dados (ex: um bloco de log que aceita Int ou Real).

Dicas Pro

Essencial para programação orientada a objetos e bibliotecas reutilizáveis.

Permite assegurar os acessos à memória dinâmicos.

Usado com a instrução VariantGet.

IS_NULL / NOT_NULL

O que faz

Verifica se um ponteiro (Variant ou DB_ANY) é nulo (não aponta para nada).

Quando usar

Evitar erros de acesso ao utilizar DB endereçados indiretamente.

Dicas Pro

Testar sempre NOT_NULL antes de chamar um método ou ler um dado através de um ponteiro.

Equivalente ao objeto 'Nothing' ou 'null' em C#/Java.

Indispensável para a gestão de listas ligadas ou estruturas dinâmicas em PLC.

IS_ARRAY

O que faz

Verifica se uma variável Variant aponta para um array (Array).

Quando usar

Programação de funções de processamento por lotes ou buffers de dados.

Dicas Pro

Acople-o com CountOfElements para conhecer o tamanho do array.

Permite criar funções de ordenação universais.

Funciona também para arrays de estruturas (UDT).

Comparação dos comparadores — Qual usar?

Escolher a instrução certa para a sua lógica PLC

Você quer...Use istoExemplo
Testar igualdade exataCMP ==Código de produto correto
Limiar de segurança altoCMP >=Pressão > 10 bar
Manter numa zonaIN_RangeTemp entre 18 e 24°C
Monitorizar erros Real|OK|Verificar resultado divisão
Verificar ponteiro DBNOT_NULLDB de receita carregado
Verificar tipo VariantEQ_TypeA entrada é Int

Perguntas Frequentes

Porque é que a minha comparação == falha às vezes com números Real?

Os números Real (vírgula flutuante) têm uma precisão limitada. Um cálculo pode dar 10.000001 em vez de 10.0. Use sempre IN_Range com uma pequena tolerância (ex: entre 9.99 e 10.01) para comparar valores flutuantes.

Qual é a diferença entre IN_Range e dois comparadores em série?

Funcionalmente é idêntico. No entanto, IN_Range é graficamente mais compacto, mais fácil de ler e mais eficiente, pois o PLC processa a instrução num único passo.

Para que servem as instruções |OK| e |NOT_OK|?

Servem para detetar erros 'silenciosos' dos cálculos Real. Se fizer uma raiz quadrada de um número negativo, o resultado é NaN. Sem o teste |OK|, esse NaN contaminaria todos os outros cálculos e poderia causar uma paragem do CPU.

Pode-se comparar estruturas completas (UDT)?

A instrução CMP == não permite comparar diretamente duas estruturas. Deve comparar cada membro individualmente ou utilizar um bloco específico que compare as zonas de memória.

Gere a sua lógica de comparação por IA

Descreva os seus limiares e condições em linguagem natural, o T-IA Connect gerará os segmentos de comparação otimizados com gestão de erros.