Первоначально релейная логика была письменным методом документирования проектирования и строительства релейных стоек , используемых в производстве и управлении процессами . [1] Каждое устройство в релейной стойке будет представлено символом на релейной схеме с показанными соединениями между этими устройствами. Кроме того, другие элементы, внешние по отношению к релейной стойке, такие как насосы, нагреватели и т. д., также будут показаны на релейной схеме.
Релейная логика развилась в язык программирования , который представляет программу графической диаграммой, основанной на принципиальных схемах релейной логики . Релейная логика используется для разработки программного обеспечения для программируемых логических контроллеров (ПЛК), используемых в промышленных приложениях управления. Название основано на наблюдении, что программы на этом языке напоминают лестницы с двумя вертикальными направляющими и рядом горизонтальных ступенек между ними. Хотя когда-то релейные диаграммы были единственной доступной нотацией для записи программ программируемых контроллеров, сегодня другие формы стандартизированы в IEC 61131-3 (например, в качестве альтернативы графической форме релейной логики существует также язык, больше похожий на C, называемый структурированным текстом в стандарте IEC 61131-3 ).
Релейная логика широко используется для программирования ПЛК , где требуется последовательное управление процессом или производственной операцией. Релейная логика полезна для простых, но критических систем управления или для переделки старых релейных схем с жестким монтажом . Поскольку программируемые логические контроллеры стали более сложными, она также использовалась в очень сложных системах автоматизации. Часто программа релейной логики используется совместно с программой HMI , работающей на рабочей станции компьютера.
Мотивацией представления последовательной логики управления в виде лестничной диаграммы было желание инженеров и техников завода разрабатывать программное обеспечение без дополнительного обучения для изучения языка, такого как FORTRAN или другого языка программирования общего назначения. Разработка и обслуживание были упрощены из-за сходства с привычными релейными аппаратными системами. [2] Реализации лестничной логики могут иметь характеристики, такие как последовательное выполнение и поддержка функций потока управления, что делает аналогию с аппаратным обеспечением несколько неточной.
Релейную логику можно рассматривать как язык, основанный на правилах, а не как процедурный язык . «Ступенька» в лестнице представляет правило. При реализации с помощью реле и других электромеханических устройств различные правила выполняются одновременно и немедленно. При реализации в программируемом логическом контроллере правила обычно выполняются последовательно программным обеспечением в непрерывном цикле или «сканировании». При достаточно быстром выполнении цикла, обычно много раз в секунду, достигается эффект одновременного и немедленного выполнения. Правильное использование программируемых контроллеров требует понимания ограничений порядка выполнения ступеней.
Сам язык можно рассматривать как набор связей между логическими контролерами (контактами) и исполнительными механизмами (катушками). Если можно проследить путь между левой стороной ступени и выходом через утвержденные (истинные или «замкнутые») контакты, ступень истинна, а бит хранения выходной катушки утвержден (1) или истинен. Если нельзя проследить путь, то выход ложный (0), а «катушка» по аналогии с электромеханическими реле считается «обесточенной». Аналогия между логическими предложениями и состоянием контактов реле принадлежит Клоду Шеннону .
В лестничной логике есть контакты, которые замыкают или размыкают цепи для управления катушками. Каждая катушка или контакт соответствуют статусу одного бита в памяти программируемого контроллера. В отличие от электромеханических реле, лестничная программа может ссылаться любое количество раз на статус одного бита, что эквивалентно реле с неопределенно большим количеством контактов.
Так называемые «контакты» могут относиться к физическим («жестким») входам в программируемый контроллер от физических устройств, таких как кнопки и концевые выключатели, через встроенный или внешний модуль ввода, или могут представлять состояние внутренних битов хранения, которые могут быть сгенерированы в другом месте программы.
Каждая ступень языка релейной логики обычно имеет одну катушку в крайнем правом углу. Некоторые производители могут допускать более одной выходной катушки на ступеньке.
—[ ]—
Нормально разомкнутый контакт, замкнутый всякий раз, когда соответствующая катушка или управляющий ею вход запитаны. (Открытый контакт в состоянии покоя.)—[\]—
Нормально замкнутый («не») контакт, замкнутый, когда соответствующая катушка или управляющий ею вход не запитаны. (Замкнутый контакт в состоянии покоя.)—( )—
Обычно неактивная катушка, запитанная всякий раз, когда ее ступень замкнута. (Неактивна в состоянии покоя.)—(\)—
Обычно активная («не») катушка, запитанная, когда ее ступень открыта. (Активна в состоянии покоя.)«Катушка» (выход ступени) может представлять собой физический выход, который управляет некоторым устройством, подключенным к программируемому контроллеру, или может представлять собой внутренний бит хранения для использования в другом месте программы.
Чтобы вспомнить их, можно представить себе шашки (контакты) как вход кнопки, а приводы (катушки) как выход лампочки. Наличие косой черты в шашках или приводах будет указывать на состояние по умолчанию устройства в состоянии покоя.
Вышеуказанное реализует функцию: Дверной двигатель = Ключевой выключатель 1 И Ключевой выключатель 2
Эта схема показывает два ключевых переключателя, которые охранники могут использовать для активации электродвигателя на двери банковского хранилища. Когда нормально открытые контакты обоих переключателей замыкаются, электричество может поступать на двигатель, который открывает дверь.
Вышеуказанное реализует функцию: Дверной двигатель = Закрытие двери И НЕ (Препятствие).
Эта схема показывает кнопку, которая закрывает дверь, и детектор препятствий, который определяет, есть ли что-то на пути закрывающейся двери. Когда нормально открытый контакт кнопки замыкается, а нормально закрытый детектор препятствий замыкается (препятствие не обнаружено), электричество может поступать на двигатель, который закрывает дверь.
Вышеуказанное реализует функцию: Разблокировка = Внутренняя разблокировка ИЛИ Внешняя разблокировка
Эта схема показывает две вещи, которые могут активировать электрические замки дверей автомобиля . Приемник дистанционного управления всегда запитан. Соленоид разблокировки получает питание, когда любой из наборов контактов замкнут.
В обычной промышленной логике пуска/останова с фиксацией имеется кнопка «Пуск» для включения контактора двигателя и кнопка «Стоп» для выключения контактора.
При нажатии кнопки «Пуск» вход становится истинным через нормально замкнутый контакт кнопки «Стоп». Когда вход «Работа» становится истинным, запечатанный нормально разомкнутый контакт «Работа» параллельно нормально разомкнутому контакту «Пуск» замыкается, поддерживая логику входа истинной (защелкнутой или запечатанной). После того, как цепь защелкнута, можно нажать кнопку «Стоп», что приведет к размыканию ее нормально замкнутого контакта и, следовательно, к ложному входу. Затем нормально замкнутый контакт «Работа» размыкается, и логика цепи возвращается в неактивное состояние.
Вышеприведенное реализует функцию: Выполнить = (Пуск ИЛИ Выполнить) И ( НЕ Остановить)
Эта конфигурация защелки является распространенной идиомой в релейной логике. Ее также можно назвать логикой запечатывания . Ключ к пониманию защелки заключается в признании того, что переключатель «Пуск» является кратковременным переключателем (как только пользователь отпускает кнопку, переключатель снова размыкается). Как только соленоид «Работа» включается, он замыкает нормально разомкнутый контакт «Работа», который защелкивает соленоид. Размыкание переключателя «Пуск» затем не имеет никакого эффекта.
В целях безопасности аварийная остановка («ES») может быть подключена последовательно с выключателем «Пуск», и логика реле должна это отражать.
Вот пример того, как могут выглядеть две ступени в программе лестничной логики. В реальных приложениях могут быть сотни или тысячи ступеней.
Обычно сложная лестничная логика "читается" слева направо и сверху вниз. Поскольку каждая из линий (или ступеней) оценивается, выходная катушка ступени может подавать сигнал на следующую ступень лестницы в качестве входа. В сложной системе на лестнице будет много "ступеней", которые пронумерованы в порядке оценки:
----[ ]---------+----[ ]-----+----( ) Переключатель | HiTemp | A/C | | +----[ ]-----+ Влажный
----[ ]----[\]--------------------( ) Кондиционер Отопление Охлаждение
Это представляет собой немного более сложную систему для ступени 2. После оценки первой строки выходная катушка "A/C" подается в ступень 2, которая затем оценивается, а выходная катушка "Cooling" может быть подана в выходное устройство "Compressor" или в ступень 3 на лестнице. Эта система позволяет разбивать и оценивать очень сложные логические конструкции.
Дополнительные функции могут быть добавлены к реализации релейной логики производителем ПЛК в виде специального блока. Когда специальный блок включен, он выполняет код на основе предопределенных аргументов. Эти аргументы могут отображаться внутри специального блока.
В этом примере система подсчитает количество нажатий кнопок салона и дистанционного разблокирования. Эта информация будет сохранена в ячейках памяти A и B. Ячейка памяти C будет содержать общее количество раз, когда дверь была разблокирована электронным способом.
ПЛК имеют много типов специальных блоков. Они включают таймеры, арифметические операторы и сравнения, табличный поиск, обработку текста, ПИД- регулирование и функции фильтрации. Более мощные ПЛК могут работать с группой ячеек внутренней памяти и выполнять операцию по диапазону адресов, например, для имитации физического последовательного контроллера барабана или конечного автомата . В некоторых случаях пользователи могут определять свои собственные специальные блоки, которые фактически являются подпрограммами или макросами. Большая библиотека специальных блоков вместе с высокоскоростным выполнением позволила использовать ПЛК для реализации очень сложных систем автоматизации.
Лестничная нотация лучше всего подходит для задач управления, где требуются только двоичные переменные и где взаимосвязь и последовательность двоичных переменных являются основной проблемой управления. Как и во всех языках параллельного программирования , последовательный порядок операций может быть неопределенным или неясным; возможны условия гонки логики , которые могут давать неожиданные результаты. Сложные ступени лучше всего разбивать на несколько более простых шагов, чтобы избежать этой проблемы. Некоторые производители избегают этой проблемы, явно и полностью определяя порядок выполнения ступени, однако программисты все равно могут испытывать проблемы с полным пониманием результирующей сложной семантики.
Аналоговые величины и арифметические операции неуклюжи для выражения в релейной логике, и у каждого производителя есть свои способы расширения нотации для этих проблем. Обычно существует ограниченная поддержка массивов и циклов, что часто приводит к дублированию кода для выражения случаев, которые в других языках потребовали бы использования индексированных переменных.
Поскольку микропроцессоры стали более мощными, такие обозначения, как последовательные функциональные диаграммы и функциональные блок-схемы, могут заменить релейную логику для некоторых ограниченных приложений. Некоторые новые ПЛК могут иметь все или часть программирования, выполненного на диалекте, который напоминает BASIC , C или другой язык программирования с привязками, подходящими для среды приложений реального времени.
В 2019 году IEEE Spectrum поставил релейную логику на 50-е место из 52 в списке популярных языков программирования. [3]
Релейная логика использует контакты переключателей или реле для реализации булевых выражений. В прошлые годы релейная логика стала возможной благодаря дискретным реле и иногда называлась релейной логикой.