1. История

ClassicLadder — это бесплатная реализация интерпретатора языка релейных схем, выпущенная под лицензией LGPL. Он был написан Марком Ле Дуарен.

Он описывает начало проекта на своем сайте:

Я решил программировать язык релейных схем только в целях тестирования на старте, в феврале 2001 года. Планировалось, что мне придется заняться новым продуктом после ухода с предприятия, на котором я тогда работал. И я подумал, что неплохо было бы рассмотреть возможность использования в этих продуктах языка релейных схем. Итак, я начал писать первые строки кода для расчета ступени с минимальным количеством элементов и ее динамического отображения под Gtk, чтобы проверить, работает ли моя первая идея реализовать все это.

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

Вуаля, вот эта работа… и еще: с тех пор я продолжаю добавлять новые функции.

— Марк Ле Дуарен из "Genesis" на сайте ClassicLadder

ClassicLadder адаптирован для работы с HAL LinuxCNC и в настоящее время распространяется вместе с LinuxCNC. Если есть проблемы/проблемы/ошибки, сообщите о них в проект LinuxCNC.

2. Введение

Лестничная логика или язык программирования Ladder — это метод рисования электрических логических схем. Сейчас это графический язык, очень популярный для программирования программируемых логических контроллеров (ПЛК). Первоначально он был изобретен для описания логики, состоящей из реле. Название основано на наблюдении, что программы на этом языке напоминают лестницы с двумя вертикальными рельсами и рядом горизонтальных ступенек между ними. В Германии и других странах Европы принято рисовать направляющие горизонтально вверху и внизу страницы, а перекладины — вертикально слева направо.

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

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

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

Лестничная логика следует этим общим шагам работы.

  • Чтение входов

  • Решить логику

  • Обновление выходов

3. Пример

Наиболее распространенными компонентами лестничной схемы являются контакты (входы), обычно это NC (нормально замкнутый) или NO (нормально разомкнутый) и coils (катушки) (выходы).

  • NO контакт images/ladder_action_load.png

  • NC контакт images/ladder_action_loadbar.png

  • coil (катушка) (выход) images/ladder_action_out.png

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

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

Этот пример представляет собой простейшую ступеньку:

images/example_link_contact_coil.png

Вход слева, B0, нормально разомкнутый контакт, подключен к катушке (выходу) справа, Q0. Теперь представьте, что напряжение подается на самый левый конец, потому что вход B0 становится true (например, вход активирован или пользователь нажал размыкающий контакт). Напряжение имеет прямой путь к катушке (выходу) справа, Q0. Как следствие, катушка Q0 (выход) изменится с 0/выкл/false на 1/вкл/true. Если пользователь отпускает B0, выход Q0 быстро возвращается в состояние 0/выкл/false.

4. Базовая схема включения-выключения с фиксацией

Опираясь на приведенный выше пример, предположим, что мы добавим переключатель, который замыкается всякий раз, когда катушка Q0 активна. Это будет иметь место в реле, где катушка может активировать контакты переключателя; или в контакторе, где помимо больших трехфазных контактов, которые являются основной особенностью контактора, часто имеется несколько небольших вспомогательных контактов.

Поскольку в нашем предыдущем примере этот вспомогательный переключатель приводится в действие катушкой Q0, мы присвоим ему тот же номер, что и катушке, которая им управляет. Это стандартная практика, которой следуют при любом лестничном программировании, хотя поначалу может показаться странным видеть переключатель, помеченный так же, как катушка. Итак, давайте назовем этот вспомогательный контакт Q0 и подключим его к контакту pushbutton B0 из нашего предыдущего примера.

Давайте посмотрим на это:

images/example_link_contact_coil2.png

Как и раньше, когда пользователь нажимает кнопку B0, включается катушка Q0. И когда включается катушка Q0, включается переключатель Q0. Теперь происходит самое интересное. Когда пользователь отпускает кнопку B0, катушка Q0 не останавливается, как это было раньше. Это связано с тем, что переключатель Q0 этой схемы фактически удерживает кнопку пользователя нажатой. Итак, мы видим, что переключатель Q0 все еще удерживает катушку Q0 включенной после того, как кнопка start была отпущена.

Этот тип контакта на катушке или реле, используемый таким образом, часто называют holding contact, поскольку он holds on катушку, с которой связан. Его также иногда называют seal контактом, и когда он активен, говорят, что цепь sealed.

К сожалению, наша схема пока имеет мало практического применения, поскольку, хотя у нас есть кнопка on или start в виде кнопки B0, у нас нет возможности отключить эту схему после ее запуска. Но это легко исправить. Все, что нам нужно, это способ отключить питание катушки Q0. Итак, давайте добавим нормально замкнутую (NC) кнопку непосредственно перед катушкой Q0.

Вот как это будет выглядеть:

images/example_link_contact_coil3.png

Теперь мы добавили кнопку off или stop B1. Если пользователь нажимает на нее, контакт между перекладиной и катушкой нарушается. Когда катушка Q0 теряет питание, оно падает до 0/выкл/false. Когда катушка Q0 отключается, отключается и переключатель Q0, поэтому holding contact разрывается или цепь unsealed. Когда пользователь отпускает кнопку stop, контакт между ступенькой и катушкой Q0 восстанавливается, но ступенька отключается, поэтому катушка не включается снова.

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

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