Светофор на ПЛК – 30 блоков

Здравствуйте!
Я хочу показать, как пишется программа для управления технологическим оборудованием на ПЛК.
Чаще всего я имел дело с ПЛК производства Schneider Electric. Выбранный мной для данной задачи Quantum является самым мощным и дорогим ПЛК данного производителя. Он может управлять оборудованием с тысячами сигналов, для светофора в реальной жизни его никто, естественно, использовать не будет.

Автоматизацией светофоров я никогда не занимался, поэтому алгоритм придумал сам. Вот он:
1. Светофор для регулируемого пешеходного перехода. Т.е. светофор для машин, светофор для пешеходов и кнопка для пешеходов, нажав которую, пешеход уведомляет о желании перейти дорогу.
2. После старта программы загорается зеленый для машин и красный для пешеходов.
3. После нажатия кнопки пешеходом начинает мигать зеленый для машин, затем загорается желтый, затем красный. После этого загорается зеленый для пешеходов, через заданное время он начинает мигать, загорается красный для пешеходов, после этого для машин загорается желтый и красный, затем зеленый.
4. В течение заданного промежутка времени после зеленого на пешеходном светофоре нажатие кнопки пешеходом не запускает алгоритм перехода. Алгоритм перехода запускается в таком случае только по истечению заданного времени.
Программирование ПЛК ведется в среде программирования Unity на языках стандарта МЭК 61131-3. В данный стандарт входят 5 языков. Для примера я выбрал язык функциональных блоков – FBD.
Вот браузер проекта в Unity:

Конфигурируем ПЛК:

ПЛК состоит из монтажной панели, блока питания (1), контроллера (2), модуля дискретного ввода на 32 сигнала 24В постоянного тока (4), модуля дискретного ввода на 32 сигнала 24В постоянного тока (5). В реальном проекте монтажных панелей, подключенных к одному контроллеру по различным сетям, могут быть десятки, а модулей ввода-вывода – сотни.
Создаем переменные необходимых типов в редакторе переменных:

Переменные, привязанные к каналам модулей ввода-вывода имеют адрес, показывающий, к какой корзине, модулю и каналу привязан сигнал.
Программа состоит из секций, выполняемых каждый цикл сканирования контроллера по порядку.
Упрощенно цикл сканирования контроллера выглядит так:
1. Чтение входных сигналов из модуля ввода в переменные с адресам.
2. Выполнение секций.
3. Запись значений из переменных с адресами в выходные сигналы модулей вывода.
4. Переход на п.1.
Создаем секцию Clock с генератором импульса периодом 0,5 секунды. Блок TP при изменении входного сигнала из 0 в 1 на выходе выдает импульс заданной длительности.

Здесь и ниже скриншоты секций приведены в режиме анимации, а не режиме редактирования. На них отображены значения переменных в текущий момент времени при подключении к ПЛК с загруженной программой (числа для числовых переменных, цвет зеленый (1)-красный (0) для булевских).
Секция Main обрабатывает основную логику.
Блок SR устанавливает выход в 1 при S1=1 и сбрасывает выход в 0 при R=1.
Блок R_TRIG устанавливает выход на 1 цикл сканирования в 1 при переходе входа из 0 в 1 (детектор переднего фронта).
Блок F_TRIG устанавливает выход на 1 цикл сканирования в 1 при переходе входа из 1 в 0 (детектор заднего фронта).
Переменная inButton, привязанная к каналу кнопки, заменена в секции на inButtonForTest для того, чтобы можно было изменить ее значение на симуляторе контроллера без реального оборудования.

Секция Outputs формирует выходные сигналы для управления лампами светофоров.

Загружаем проект в симулятор контроллера:

Значение любых переменных можно посмотреть в анимационной таблице:

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

Пробуем перейти дорогу:

Не ожидал, что для управления такого простого объекта, как светофор, потребуется 30 блоков.
В следующей статье покажу, как написать данную программу, используя все языки стандарта МЭК 61131-3 одновременно.

UPD. Исправил ошибку в названии стандарта.
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 15

    +2
    Ностальгия:)

    Помню нам преподаватель с одногруппником задал сделать программу для целого перекрестка (там правда контроллер был гораздо проще, не помню уже точно какой, но тоже от SE). Работа получилась интересная — сидели на перекрестке и вымеряли секундомером все интервалы.

    Блоков вроде получилось меньше (да и язык другой использовался, не помню уже), но до конца заданного срока не успели исправить все баги, поэтому работу не приняли.
      0
      В следующей статье покажу, как написать данную программу, используя все языки стандарта МЭК 601131-3 одновременно.

      Помню-помню, сочиняешь на LD какую-нить ересь из катушек и контактов, а потом получаешь вполне осмысленный код на IL или ST.
      Ностальгия:)
        0
        Там будет использование всех языков в одной программе, чтобы показать, для чего предназначен каждый из языков.
        +2
        Очень смешанные чувства после прочтения. С одной стороны, имел дела с ПЛК разных производителей, поэтому статья кажется банальной и не заслуживающей значительного внимания. С другой — на хабре она смотрится куда уместнее, чем unboxing очередного телефона. В общем, ставлю плюс.

        С контроллерами, поддерживающими МЭК'овские языки, работать не приходилось, но общался с другими (TAC и Segnetics), имеющими свои FBD-языки. Делал под них программы для HVAC (вентиляционная автоматика). Некоторые вещи делаются просто и удобно, некоторые крайне неудобно. Плюс то, что порог вхождения выглядит довольно низким, палка о двух концах: далеко не всех инженеров можно подпускать к программированию. Иногда (в унаследованном «коде») встречал такие решения, что волосы дыбом вставали.
          0
          Спасибо за плюс :)
          Действительно, программа банальная. Для тех, кто работает в другой области, но интересуется «как это сделано».
          Тема навеяна постами «Программа на Java в 30 строк».
          Сложные программы для ПЛК пишу на ST. Так же поступает большинство программистов ПЛК, с которыми я сталкивался.
            0
            Только там было «на JavaScript», не разочаровывайте хабр =))
              0
              Виноват, хотел исправиться, но уже поздно — редактировать не дает.
            0
            Уточню: простые вещи делаются просто и удобно. Чуть более сложные — жопа. Практически, арматура из костылей и подпорок :)
            0
            Crestron напомнило
              0
              EBOOL — какой-то нестандартный тип, в 61131-3 он не описан… я верно понимаю, что это есть битовый BOOL, предназначенный для привязки напрямую к входам-выходам ПЛК?
              Поддержу насчет ST — сам использую исключительно его.
              Насчет использования всех сразу языков в одной программе — разве что как некая демонстрация возможностей, может быть? Использование такого решения в продакшене не кажется мне хорошей идеей.
              А так вообще использование ПЛК такого класса для светофора — ну это даже не из пушки по воробьям :) Тут и Zelio хватило бы за все глаза, раз уж Вы продукцию Schneider предпочитате. Тот же самый FBD, кстати, он умеет.
                0
                EBOOL содержит значение на предыдущем скане для определения фронта.
                Использование всех языков только для демонстрации возможностей, в реальном проекте никто так не делает. У меня было максимум 3 языка в одном реальном проекте :)
                С Zelio не работал, среда программирования у него другая.
                +1
                А вот интересно (в качестве контраста) — на ATTINY13 не взлетит? Если RESET использовать как пешеходную кнопку — то как раз будут 5 ног: три для автомобильного и две для пешеходного светофоров.
                Конечный автомат для управления этим хозяйством, по идее, должен влезть в 512 команд ПЗУ, что на борту.
                  +1
                  Влезет со свистом, у меня ПИД регулятор вместе с арифметикой меньше команд занимает :)
                  0
                  Скажите, а в PLC Simulator Panel можно как-то писать входа и читать выхода сторонним ПО?
                    0
                    Да, по Modbus TCP, но только с другого компьютера по сети

                  Only users with full accounts can post comments. Log in, please.