Инструкции TIA Portal

Операции сравнения
Логика принятия решений и Диапазоны

Сравнение значений — это двигатель промышленной логики принятия решений. Освойте стандартные компараторы, тесты диапазонов и проверки на валидность.

Что такое операции сравнения в TIA Portal?

Операции сравнения позволяют сравнивать два значения одного типа данных (целые числа, вещественные числа, время и т. д.) или проверять, находится ли значение внутри или вне определенного диапазона. Они фундаментальны для создания порогов срабатывания сигнализации, условий перехода и контуров регулирования.

TIA Portal предлагает стандартные компараторы (==, <>, >= и т. д.), инструкции диапазонов (IN_Range, OUT_Range), тесты на валидность для чисел с плавающей запятой и расширенные инструкции для типов данных Variant и указателей DB.

Стандартные компараторы

Оценка равенства и неравенства между двумя операндами

CMP == — Равно (Equal)

==

Что она делает

Сравнивает два операнда (IN1 и IN2). Если IN1 равен IN2, инструкция возвращает TRUE. Поддерживает почти все простые типы данных.

Когда использовать

Проверка того, достиг ли счетчик своей цели, соответствует ли уставка HMI текущему значению или активен ли конкретный режим машины.

Советы профи

Будьте осторожны с типами Real: строгое равенство может не сработать из-за точности. Предпочитайте маржу или диапазон.

В SCL: IF value1 = value2 THEN ...

Вы можете сравнивать строки (String) для проверки идентификационных кодов.

CMP <> — Не равно (Not equal)

<>

Что она делает

Возвращает TRUE, если оба операнда IN1 и IN2 различны. Это противоположность равенству.

Когда использовать

Обнаружение изменения значения, проверка того, что датчик не возвращает 0, или проверка того, что текущий режим работы не является запрещенным.

Советы профи

Часто используется для запуска действия, как только значение отклоняется от уставки.

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

Можно использовать для сравнения меток времени (DTL), чтобы увидеть, изменилась ли дата.

CMP >= — Больше или равно

>=

Что она делает

Возвращает TRUE, если первое значение (IN1) больше или равно второму (IN2).

Когда использовать

Запуск сигнализации высокого уровня, разрешение нагрева до достижения температуры.

Советы профи

Идеально подходит для порогов безопасности, где граничное значение должно быть включено в условие.

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

Можно использовать с типами Time для проверки того, истекло ли минимальное время.

CMP <= — Меньше или равно

<=

Что она делает

Возвращает TRUE, если IN1 меньше или равно IN2.

Когда использовать

Мониторинг низкого уровня, остановка насоса, подтверждение минимального давления.

Советы профи

Часто сочетается с гистерезисом для предотвращения дребезга выхода.

Работает нативно с типами Date и Time.

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

CMP > — Больше (Greater than)

>

Что она делает

Возвращает TRUE, если IN1 строго больше IN2.

Когда использовать

Строгое сравнение, которое не должно включать целевое значение.

Советы профи

Используется реже, чем >= в автоматизации, но полезно для математических алгоритмов.

В SCL: IF current > max THEN ...

Предпочтительно для сравнения индексов циклов (FOR).

CMP < — Меньше (Less than)

<

Что она делает

Возвращает TRUE, если IN1 строго меньше IN2.

Когда использовать

Тесты на строгие нижние границы.

Советы профи

Полезно для проверки того, является ли значение отрицательным (val < 0).

В SCL: IF val < 0 THEN ...

Работает с символами (алфавитная сортировка).

Операции с диапазонами

Проверка принадлежности к интервалу [MIN..MAX]

IN_Range — В диапазоне

IN_Range

Что она делает

Проверяет, находится ли значение (VAL) между нижней границей (MIN) и верхней границей (MAX). Интервал закрытый: MIN <= VAL <= MAX.

Когда использовать

Мониторинг рабочего окна (например, давление от 2 до 5 бар), проверка скорости машины.

Советы профи

Выгодно заменяет два последовательно соединенных компаратора, делая нетворки более читаемыми.

Если MIN > MAX, инструкция всегда возвращает FALSE.

Очень полезно для условий 'Ready to Run', требующих нескольких аналоговых условий.

OUT_Range — Вне диапазона

OUT_Range

Что она делает

Возвращает TRUE, если значение (VAL) находится вне интервала, определенного MIN и MAX. Либо VAL < MIN, либо VAL > MAX.

Когда использовать

Обнаружение аномалий или превышение экстремальных порогов (сигнализация диапазона).

Советы профи

Это полная противоположность IN_Range.

Используйте её для упрощения логики технологических сигнализаций.

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

Тесты на валидность

Проверка целостности чисел с плавающей запятой

|OK| — Проверить валидность

|OK|

Что она делает

Проверяет, является ли значение с плавающей запятой (Real или LReal) валидным числом. Возвращает FALSE, если значение равно NaN (Not a Number) или Inf (Infinity).

Когда использовать

После сложных вычислений (деление, квадратный корень, логарифм), чтобы избежать распространения математических ошибок, которые могут остановить ПЛК.

Советы профи

Необходимо перед отправкой значения Real на аналоговый выход или преобразователь частоты.

Позволяет обнаружить косвенное деление на ноль.

Удобно для фильтрации данных от неисправных датчиков.

|NOT_OK| — Проверить невалидность

|NOT_OK|

Что она делает

Возвращает TRUE, если значение с плавающей запятой невалидно (NaN или Inf).

Когда использовать

Установка бита ошибки вычислений или принудительное назначение безопасного значения.

Советы профи

Используйте это, чтобы перевести машину в безопасное состояние, если расчет траектории завершился ошибкой.

Это эквивалент IS_NAN в других языках.

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

Расширенные сравнения (Variant)

Инструкции для динамического программирования и сложных типов

EQ_Type / NE_Type

Что она делает

Сравнивает тип данных переменной типа Variant с типом другой переменной или определенным типом.

Когда использовать

В универсальных блоках, которые должны обрабатывать различные типы данных (например, блок логирования, принимающий Int или Real).

Советы профи

Важно для объектно-ориентированного программирования и переиспользуемых библиотек.

Позволяет обезопасить динамический доступ к памяти.

Используется вместе с инструкцией VariantGet.

IS_NULL / NOT_NULL

Что она делает

Проверяет, является ли указатель (Variant или DB_ANY) пустым (никуда не указывает).

Когда использовать

Избежание ошибок доступа при использовании DB с косвенной адресацией.

Советы профи

Всегда проверяйте NOT_NULL перед вызовом метода или чтением данных по указателю.

Эквивалент объекта 'Nothing' или 'null' в C#/Java.

Необходимо для управления связанными списками или динамическими структурами в ПЛК.

IS_ARRAY

Что она делает

Проверяет, указывает ли переменная Variant на массив (Array).

Когда использовать

Программирование функций пакетной обработки или буферов данных.

Советы профи

Используйте вместе с CountOfElements, чтобы узнать размер массива.

Позволяет создавать универсальные функции сортировки.

Также работает для массивов структур (UDT).

Сравнение компараторов — какой использовать?

Выбор правильной инструкции для логики вашего ПЛК

Вы хотите...Используйте этоПример
Проверить точное равенствоCMP ==Код продукта верный
Верхний порог безопасностиCMP >=Давление > 10 бар
Удерживать в зонеIN_RangeТемпература от 18 до 24°C
Следить за ошибками Real|OK|Проверить результат деления
Проверить указатель DBNOT_NULLDB рецепта загружен
Проверить тип VariantEQ_TypeВход действительно типа Int

Часто задаваемые вопросы

Почему сравнение == иногда не срабатывает с числами Real?

Числа Real (с плавающей запятой) имеют ограниченную точность. Расчет может дать 10.000001 вместо 10.0. Всегда используйте IN_Range с небольшим допуском (например, от 9.99 до 10.01) для сравнения вещественных значений.

В чем разница между IN_Range и двумя последовательно соединенными компараторами?

Функционально они идентичны. Однако IN_Range графически более компактен, его легче читать, и он работает быстрее, так как ПЛК обрабатывает инструкцию за один шаг.

Для чего нужны инструкции |OK| и |NOT_OK|?

Они служат для обнаружения «невидимых» ошибок в расчетах Real. Если вы извлекаете квадратный корень из отрицательного числа, результатом будет NaN. Без теста |OK| этот NaN загрязнит все остальные расчеты и может привести к остановке CPU.

Можно ли сравнивать целые структуры (UDT)?

Инструкция CMP == не позволяет напрямую сравнивать две структуры. Вы должны сравнивать каждый элемент отдельно или использовать специальный блок, который сравнивает области памяти.

Генерируйте логику сравнения с помощью ИИ

Опишите ваши пороги и условия на естественном языке, T-IA Connect сгенерирует оптимизированные сети сравнения с обработкой ошибок.