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

Логические операции с битами
Контакты, Катушки и Детектирование фронтов

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

Что такое логические операции с битами?

Логические операции с битами — это самые фундаментальные инструкции в программировании ПЛК. Они работают с булевыми сигналами (TRUE/FALSE, 1/0), считывая состояния входов, комбинируя условия с помощью логики И/ИЛИ и управляя выходами. В LAD они представлены в виде контактов и катушек. В FBD они выглядят как блоки логических вентилей И/ИЛИ/НЕ.

Каждая программа ПЛК активно использует инструкции битовой логики. Цепь пуска/останова двигателя, условие аварии, блокировка клапана — всё это начинается с контактов, считывающих состояние датчиков, и заканчивается катушками, управляющими исполнительными механизмами.

Контакты — Чтение состояний входов

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

Нормально разомкнутый контакт

—| |—
F9

Что он делает

Считывает булев тег (BOOL). Если тег имеет значение TRUE (1), контакт замыкается и передает сигнал (RLO = TRUE) следующему элементу. Если тег имеет значение FALSE (0), контакт разомкнут и блокирует поток сигнала. Это самая часто используемая инструкция в программировании LAD.

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

Каждый раз, когда нужно проверить, является ли условие ИСТИННЫМ: нажата ли кнопка? Активен ли датчик? Установлен ли флаг? Разместите нормально разомкнутый контакт и назначьте ему ваш тег.

Советы экспертов

Название 'Нормально разомкнутый' пришло из релейной логики — в нормальном (покоящемся) состоянии контакт разомкнут (не проводит ток). Он замыкается при активации.

Несколько НР-контактов, соединенных последовательно, создают логику И. Несколько НР-контактов в параллельных ветвях создают логику ИЛИ.

В FBD эквивалентом является просто подключение переменной BOOL к входу блока И/ИЛИ — явный символ контакта не требуется.

Нормально замкнутый контакт

—|/|—
F10

Что он делает

Инверсия нормально разомкнутого контакта. Если тег имеет значение FALSE (0), контакт замкнут и пропускает сигнал. Если тег имеет значение TRUE (1), контакт размыкается и блокирует сигнал. Действует как операция НЕ для значения тега.

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

Когда нужно проверить, что условие НЕ истинно: кнопка аварийного останова не нажата, ошибка не активна, концевой выключатель не достигнут. Очень часто используется для блокировок безопасности и условий аварийной сигнализации.

Советы экспертов

Используйте НЗ-контакты для аварийных остановов и цепей безопасности — они обеспечивают безопасность при отказе. Если провод оборвется, НЗ-контакт разомкнется и остановит машину.

В FBD эквивалентом является инвертированный вход (маленький кружок на входном выводе блока И/ИЛИ).

Не путайте инструкцию НЗ-контакта с физической НЗ-кнопкой. Это независимые понятия.

Инвертировать RLO

—|NOT|—

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

Инвертирует (отрицает) текущий результат логической операции (RLO). Если логическая цепь до этой точки дает значение TRUE, NOT делает его FALSE, и наоборот. Работает с накопленным логическим результатом, а не с конкретным тегом.

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

Когда нужно инвертировать сложное логическое выражение, а не один тег. Вместо того чтобы переписывать всё условие с инвертированными контактами, поставьте NOT в конце, чтобы перевернуть результат.

Советы экспертов

NOT инвертирует весь RLO в данной точке цепи — это отличается от НЗ-контакта, который инвертирует только один тег.

В FBD используйте блок NOT или инвертируйте выход логического вентиля.

Используйте экономно — чрезмерное использование NOT делает логику трудночитаемой. Часто перестройка логики оказывается более понятной.

Катушки — Управление выходами

Катушки записывают результат логической цепи в выходной тег

Присваивание

—( )—
Shift + F7

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

Записывает текущий RLO (Результат логической операции) в булев тег. Если логическая цепь ИСТИННА, тег становится TRUE. Если ЛОЖНА, тег становится FALSE. Это стандартная выходная катушка — она напрямую отражает входную логику в каждом цикле сканирования.

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

Для любого выхода, который должен напрямую следовать входным условиям. Сигнальная лампа, которая горит, когда двигатель работает; клапан, который открывается при соблюдении условий. Выход отслеживает вход — когда условия становятся ложными, выход также становится ложным.

Советы экспертов

Катушка присваивания является 'неретентивной' — она производит запись при каждом сканировании. Если логика становится ложной, выход немедленно становится ложным.

Тег должен присваиваться только в ОДНОЙ сети. Несколько присваиваний одному и тому же тегу приведут к тому, что последнее из них победит, что вызовет непредсказуемое поведение.

В FBD присваивание — это просто соединение выхода логического вентиля с тегом BOOL.

Инвертированное присваивание

—(/)—

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

Записывает инвертированный RLO в булев тег. Если логическая цепь ИСТИННА, тег становится FALSE. Если ЛОЖНА, тег становится TRUE. Объединяет Присваивание + NOT в одной инструкции.

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

Когда выход должен быть активен в противоположном состоянии. Например, лампа 'Система в норме', которая выключается при обнаружении ошибки. Вместо инвертирования всей логической цепи используйте инвертированную катушку.

Советы экспертов

Эквивалентно размещению NOT перед обычной катушкой присваивания, но более компактно.

Используйте с осторожностью — инвертированные катушки могут быть трудны для восприятия. Иногда понятнее перестроить логику.

В FBD это инвертированное выходное соединение.

Сброс выхода (Reset)

—(R)—

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

Когда RLO ИСТИНЕН, тег устанавливается в значение FALSE (0). Когда RLO ЛОЖЕН, тег не меняется (сохраняет свое текущее значение). Это однонаправленная операция — она может только выключать, но не включать.

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

В цепях Set/Reset: одна сеть устанавливает выход (включает), другая сбрасывает его (выключает). Используйте Reset для условий останова, очистки ошибок и квитирования аварий. Сброс обычно имеет приоритет в логике безопасности.

Советы экспертов

Reset действует только тогда, когда его RLO ИСТИНЕН. Когда RLO ЛОЖЕН, выход остается неизменным — он НЕ устанавливается в TRUE.

В паре S/R инструкция, которая расположена в программе ПОСЛЕДНЕЙ, имеет приоритет (если оба условия ИСТИННЫ одновременно).

Инструкция Reset является ретентивной — после сброса выход остается ложным, пока не будет явно установлен снова инструкцией Set.

Установка выхода (Set)

—(S)—

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

Когда RLO ИСТИНЕН, тег устанавливается в значение TRUE (1). Когда RLO ЛОЖЕН, тег не меняется (сохраняет свое текущее значение). Это однонаправленная операция — она может только включать, но не выключать.

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

В цепях Set/Reset: используйте Set для условий запуска, сигналов защелки и флагов первого цикла. После установки выход остается ИСТИННЫМ, пока не будет явно сброшен, что делает его 'самоблокирующимся' без необходимости в дополнительном контакте самоподхвата.

Советы экспертов

Set действует только тогда, когда его RLO ИСТИНЕН. Когда RLO ЛОЖЕН, выход остается неизменным — он НЕ сбрасывается.

Классическое управление двигателем: Сеть 1 = Кнопка Пуск → Set Двигатель. Сеть 2 = Кнопка Стоп ИЛИ Ошибка → Reset Двигатель.

Будьте осторожны с ретентивными тегами в цепях безопасности — после цикла включения питания выходы Set могут сохранить свое последнее состояние в зависимости от настроек DB.

Операции с битовыми полями

Установка или сброс диапазона бит одной операцией

SET_BF — Установка битового поля

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

Устанавливает непрерывную группу бит в значение TRUE, начиная с указанного адреса. Вы определяете начальный бит и количество устанавливаемых бит. Когда RLO ИСТИНЕН, все указанные биты устанавливаются в 1.

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

Когда нужно активировать несколько связанных выходов одновременно — например, установку всех бит слова состояния, инициализацию группы флагов или активацию банка выходов за один раз.

Советы экспертов

Полезно для групповых операций вместо написания отдельных инструкций Set для каждого бита.

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

Как и Set, эта инструкция действует только при RLO = TRUE — при RLO = FALSE биты не меняются.

RESET_BF — Сброс битового поля

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

Сбрасывает непрерывную группу бит в значение FALSE, начиная с указанного адреса. Вы определяете начальный бит и количество сбрасываемых бит. Когда RLO ИСТИНЕН, все указанные биты обнуляются.

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

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

Советы экспертов

Дополнение к SET_BF — используйте их вместе для групповых операций установки/сброса.

Особенно удобно для очистки слов аварийной сигнализации или статусных регистров одной операцией.

Как и Reset, эта инструкция действует только при RLO = TRUE — при RLO = FALSE биты не меняются.

Триггеры — Схемы с памятью

Бистабильные элементы, которые запоминают свое состояние до явного изменения

SR — SR-триггер

Что он делает

Бистабильный триггер с приоритетом установки (Set). Имеет два входа: S (Set) и R (Reset), и один выход Q. При S=TRUE выход Q становится TRUE. При R=TRUE выход Q становится FALSE. Если и S, и R одновременно ИСТИННЫ, Q принимает значение TRUE (установка доминирует).

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

Для схем фиксации состояния, где условие установки должно иметь приоритет. В SR-триггере, если одновременно нажаты кнопки Пуск и Стоп, выход останется включенным. Используйте это, если допустим 'приоритет пуска'.

Советы экспертов

SR = приоритет установки. Если S=1 и R=1 → Q=1. Используйте, когда запуск важнее остановки.

В приложениях, критичных к безопасности, предпочтительнее RS (приоритет сброса) — это безопаснее при одновременном срабатывании обоих условий.

Триггер представлен единым блоком как в LAD, так и в FBD с входас S, R и выходом Q.

RS — RS-триггер

Что он делает

Бистабильный триггер с приоритетом сброса (Reset). Имеет два входа: R (Reset) и S (Set), и один выход Q. При S=TRUE выход Q становится TRUE. При R=TRUE выход Q становится FALSE. Если и R, и S одновременно ИСТИННЫ, Q принимает значение FALSE (сброс доминирует).

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

Для схем фиксации, где безопасность превыше всего. Условие сброса (останова) имеет приоритет — если активны и пуск, и стоп, выход будет ВЫКЛЮЧЕН. Это стандартный выбор для управления двигателями и блокировок безопасности.

Советы экспертов

RS = приоритет сброса. Если S=1 и R=1 → Q=0. Самый безопасный выбор для большинства промышленных задач.

Классическая схема управления двигателем: S = Кнопка_Пуск И НЕ Ошибка, R = Кнопка_Стоп ИЛИ Аварийный_Останов ИЛИ Ошибка.

Выход Q сохраняет свое состояние внутри цикла сканирования — он держит значение до следующего вычисления триггера.

Детектирование фронтов — обнаружение изменений сигнала

Обнаружение перехода сигнала из FALSE в TRUE или из TRUE в FALSE

Сканировать операнд на положительный фронт

—|P|—

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

Обнаруживает нарастающий фронт (переход FALSE→TRUE) на конкретном операнде. Инструкция сравнивает текущее значение со значением из предыдущего сканирования. Если значение изменилось с 0 на 1, RLO становится ИСТИННЫМ ровно на один цикл сканирования. Требуется бит памяти фронта (M-бит) для хранения предыдущего состояния.

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

Когда нужен разовый импульс от длительного сигнала: подсчет нажатий кнопок, запуск одиночного действия при изменении уровня, инкремент счетчика при каждой активации. Без детектирования фронта удерживаемая кнопка срабатывала бы в каждом цикле сканирования.

Советы экспертов

Вы ДОЛЖНЫ назначить уникальный бит памяти фронта (M-бит) — НЕ используйте один и тот же M-бит для нескольких детекторов фронта, иначе они будут мешать друг другу.

Выход ИСТИНЕН ровно один цикл сканирования ПЛК (обычно 1–50 мс). Если нужен более длинный импульс, используйте таймер.

В LAD это выглядит как контакт с пометкой 'P'. Тег M-бита отображается над или под контактом.

Сканировать операнд на отрицательный фронт

—|N|—

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

Обнаруживает падающий фронт (переход TRUE→FALSE) на конкретном операнде. Инструкция сравнивает текущее значение со значением из предыдущего сканирования. Если значение изменилось с 1 на 0, RLO становится ИСТИННЫМ ровно на один цикл сканирования. Требуется бит памяти фронта.

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

Когда нужно отреагировать на выключение сигнала: обнаружить отпускание кнопки, сработать при деактивации датчика или зафиксировать момент завершения этапа процесса.

Советы экспертов

Те же правила, что и для положительного фронта — каждому детектору отрицательного фронта нужен свой уникальный M-бит.

Полезно для действий по 'отпусканию кнопки': запуск таймера при отпускании, а не при нажатии.

В последовательности останова используйте отрицательные фронты, чтобы определить, когда завершается каждый шаг (выход переходит из ON в OFF).

Установить операнд по положительному фронту

—(P)—

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

Устанавливает (записывает TRUE) указанный операнд на один цикл сканирования при обнаружении положительного фронта (FALSE→TRUE) на входе RLO. Объединяет детектирование фронта и присваивание выхода в одной инструкции.

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

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

Советы экспертов

Это инструкция типа 'катушка' — она ставится в конце цепи, а не в середине.

Требует бит памяти фронта, как и контактная версия.

Операнд ИСТИНЕН только один цикл, затем автоматически возвращается в FALSE.

Установить операнд по отрицательному фронту

—(N)—

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

Устанавливает (записывает TRUE) указанный операнд на один цикл сканирования при обнаружении отрицательного фронта (TRUE→FALSE) на входе RLO. Объединяет детектирование падающего фронта и присваивание выхода в одной инструкции.

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

Когда вы хотите установить флаг или выход ровно на один цикл при падающем фронте. Полезно для запуска действий после деактивации.

Советы экспертов

Инструкция типа 'катушка' — размещается в конце цепи.

Требует собственного уникального бита памяти фронта.

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

P_TRIG — Сканировать RLO на положительный фронт

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

Обнаруживает нарастающий фронт на результате логической операции (RLO), а не на конкретном операнде. Когда суммарный результат логики переходит из FALSE в TRUE, выход становится ИСТИННЫМ на один цикл сканирования. Память фронта хранится внутри экземпляра инструкции.

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

Когда нужно обнаружить нарастающий фронт сложной логической комбинации, а не одного тега. Например: обнаружить момент, когда (Датчик1 И Датчик2 И НЕ Ошибка) впервые становится ИСТИННЫМ.

Советы экспертов

P_TRIG работает с накопленным RLO — он детектирует фронт всей логической цепочки перед ним.

Память фронта встроена в инструкцию — отдельный M-бит не требуется.

В FBD P_TRIG — это блок с входом CLK и выходом Q.

N_TRIG — Сканировать RLO на отрицательный фронт

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

Обнаруживает падающий фронт на результате логической операции (RLO). Когда суммарный результат логики переходит из TRUE в FALSE, выход становится ИСТИННЫМ на один цикл сканирования. Память фронта хранится внутри экземпляра инструкции.

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

Когда нужно обнаружить момент, когда сложное условие перестает быть истинным. Например: зафиксировать момент, когда (Авто_Режим И Все_Готово) переходит из TRUE в FALSE.

Советы экспертов

N_TRIG — это аналог P_TRIG для падающего фронта.

Отдельный M-бит не требуется — память фронта является внутренней.

Полезно для обнаружения окончания комбинированного условия, а не одного сигнала.

R_TRIG — Детектор положительного фронта сигнала

Что он делает

Функциональный блок детектора нарастающего фронта, соответствующий стандарту МЭК (IEC) 61131-3. Имеет вход CLK и выход Q. Когда CLK переходит из FALSE в TRUE, выход Q становится ИСТИННЫМ на один цикл сканирования. Память фронта хранится в данных экземпляра FB.

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

Когда нужно детектирование фронта по стандарту МЭК с собственными данными экземпляра. R_TRIG — это функциональный блок; каждый экземпляр автоматически поддерживает свою память фронта. Рекомендуется для структурированного и повторно используемого кода.

Советы экспертов

R_TRIG — это FB, ему нужны данные экземпляра (либо собственный DB, либо как мультиэкземпляр в родительском FB). Это делает его автономным и удобным для повторного использования.

Доступен начиная с версии V1.0 на S7-1200/1500. Это стандартный способ детектирования фронтов по МЭК 61131-3.

В SCL: myRTRIG(CLK := mySignal); IF myRTRIG.Q THEN ... END_IF;

F_TRIG — Детектор отрицательного фронта сигнала

Что он делает

Функциональный блок детектора падающего фронта, соответствующий стандарту МЭК (IEC) 61131-3. Имеет вход CLK и выход Q. Когда CLK переходит из TRUE в FALSE, выход Q становится ИСТИННЫМ на один цикл сканирования. Память фронта хранится в данных экземпляра FB.

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

Когда нужно детектирование падающего фронта по стандарту МЭК с собственными данными экземпляра. F_TRIG — это аналог R_TRIG для падающего фронта.

Советы экспертов

F_TRIG — это FB с собственным экземпляром. Как и R_TRIG, он автономен и соответствует стандарту МЭК 61131-3.

В SCL: myFTRIG(CLK := mySignal); IF myFTRIG.Q THEN ... END_IF;

Отдавайте предпочтение R_TRIG/F_TRIG вместо контактов |P|/|N| при написании библиотечного кода, так как они не требуют внешних M-битов.

Краткий справочник — Все 20 инструкций битовой логики

#ИнструкцияСимвол LADСочетаниеОписание
1Нормально разомкнутый контакт—| |—F9Пропускает сигнал, если тег ИСТИНЕН
2Нормально замкнутый контакт—|/|—F10Пропускает сигнал, если тег ЛОЖЕН
3Инвертировать RLO—|NOT|—Инвертирует результат логической операции
4Присваивание—( )—Shift + F7Записывает RLO в выходной тег
5Инвертированное присваивание—(/)—Записывает инвертированный RLO в выходной тег
6Сброс выхода (Reset)—(R)—Сбрасывает тег (FALSE), если RLO ИСТИНЕН
7Установка выхода (Set)—(S)—Устанавливает тег (TRUE), если RLO ИСТИНЕН
8SET_BF — Установка битового поляУстанавливает диапазон бит в TRUE
9RESET_BF — Сброс битового поляСбрасывает диапазон бит в FALSE
10SR — SR-триггерТриггер с приоритетом установки (S=1,R=1 → Q=1)
11RS — RS-триггерТриггер с приоритетом сброса (S=1,R=1 → Q=0)
12Сканировать операнд на положительный фронт—|P|—Детектирует нарастающий фронт операнда
13Сканировать операнд на отрицательный фронт—|N|—Детектирует падающий фронт операнда
14Установить операнд по положительному фронту—(P)—Устанавливает операнд на 1 цикл по нарастающему фронту
15Установить операнд по отрицательному фронту—(N)—Устанавливает операнд на 1 цикл по падающему фронту
16P_TRIG — Сканировать RLO на положительный фронтДетектирует нарастающий фронт результата логики (RLO)
17N_TRIG — Сканировать RLO на отрицательный фронтДетектирует падающий фронт результата логики (RLO)
18R_TRIG — Детектор положительного фронта сигналаМЭК-детектор нарастающего фронта (FB)
19F_TRIG — Детектор отрицательного фронта сигналаМЭК-детектор падающего фронта (FB)

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

В чем разница между катушками Set/Reset и триггерами SR/RS?

Катушки установки (S) и сброса (R) — это отдельные инструкции, размещаемые в разных сетях. Вы управляете приоритетом, выбирая, какая сеть будет выполнена последней. SR/RS триггеры — это единые блоки с обоими входами, где приоритет встроен (SR — приоритет установки, RS — приоритет сброса). Триггеры более компактны и делают приоритет явным.

Какое детектирование фронта использовать: |P|/|N|, (P)/(N), P_TRIG/N_TRIG или R_TRIG/F_TRIG?

Контакты |P|/|N| детектируют фронт конкретного тега и требуют внешнего M-бита. Катушки (P)/(N) объединяют детектирование фронта с присваиванием выхода. P_TRIG/N_TRIG детектируют фронт RLO (комбинированной логики). R_TRIG/F_TRIG — это стандартные функциональные блоки МЭК со встроенной памятью. Для библиотечного кода предпочтительны R_TRIG/F_TRIG. Для простой логики в цепях контакты |P|/|N| вполне подходят.

Почему моя схема Set/Reset ведет себя неожиданно?

Самая частая причина — одновременная ИСТИННОСТЬ условий Set и Reset. В этом случае побеждает инструкция, которая находится в программе последней. Если сеть сброса стоит перед сетью установки, выход будет установлен. Решение: используйте RS-триггер (приоритет сброса) для критически важных цепей или убедитесь, что условия исключают друг друга.

Может ли детектирование фронта работать с аналоговыми значениями или только с BOOL?

Инструкции детектирования фронта (|P|, |N|, R_TRIG, F_TRIG) работают только с булевыми сигналами. Для аналоговых значений нужно сначала создать сравнение (например, значение > порога), которое даст результат типа BOOL, а затем применить детектирование фронта к этому результату.

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

Опишите логику управления обычным текстом, и T-IA Connect сгенерирует код для ПЛК — включая контакты, катушки, триггеры и детектирование фронтов.