Как сделать 240 килобайт исходников на ПЛК для управления одними рольставнями — АСУ ТП: сообщество инженеров

Как сделать 240 килобайт исходников на ПЛК для управления одними рольставнями

В задаче требовалось подключить рольставни к ПЛК. Принцип работы рольставней очень прост. Есть трубчатый мотор который наматывает на себя полотно ставней.
Мотор однофазный асинхронный. Направление вращение изменяется переключением фазы между двумя проводниками выходящими из мотора.
Обычно рольставни покупают сразу с модулем управления. Но тут был объект с десятками рольставней. И требовалось создать HMI для управления всеми из разных мест и разных устройств. Устройствами могли быть физические кнопки без фиксации, кнопки с фиксацией, экранные кнопки, всевозможные датчики и проч. Ничто не должно было стать препятствием для подключения чего угодно с целью группового управления рольставнями.

В качестве ПЛК была выбрана серия WAGO PFC200, а в качестве среды разработки пакет e!COCKPIT . Среда разработки от WAGO привлекательна тем что в нее легко интегрируются модели MATLAB. В MATLAB я и начал разработку, чтобы не изучать глубоко языки ПЛК и их библиотеки.

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

И все же модель в MATLAB — Similink — Stateflow получилась вот такая:

Тестовая модель верхнего уровня
Содержимое блока модели Blind_control
Содержимое непосредственно рабочей модели управления рольставнями
Содержимое блока HMI_contro
Содержимое блока HMI_buttons

Уточню, здесь представлена модель управления только одним мотором. Потом модель в ПЛК просто тиражируется для остальных моторов.
Модель получилась на удивление сложная. Но почему!?

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

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

В-третьих, управлять с помощью реле не так просто как кажется, если нужно думать о продлении ресурса реле. Нельзя просто сразу переключать направление движения или делать быстрые переключения пока мотор не остановился и пусковой конденсатор не разрядился. Иначе реле быстро обгорят и перестанут контачить или залипнут. Поэтому детально проработан автомат состояний Stateflow с именем Motor.

Реализованы следующие сценарии управления от кнопок:

Сценарий управления с двумя кнопками

  • Пока нажимается кнопка Btn_1 — движется вниз
  • Пока нажимается кнопка Btn_2 — движется вверх
  • Если ничего не нажато — остановка

Сценарий 1 управления одной кнопкой

  • 1.Нажали кнопку и отпустили — движется вверх
  • 2.Нажали кнопку — остановка
  • 3.Нажали кнопку — движется вниз
  • 4.Нажали кнопку — остановка
  • Переход к пункту 1

Сценарий 2 управления одной кнопкой

Если мотор остановлен:

  • Короткое нажатие вызывает подъем вверх,
  • Два коротких нажатия вызывают опускание

Если мотор работает:

  • Короткое нажатие вызывает остановку

После того как модель в Stateflow была протестирована и отлажена был сгенерирован исходник на языке Statement List (STL) для среды разработки e!COCKPIT.
И вот полученный код

Осторожно! Реально длинный код.

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

Но попытка все реализовать внутри ПЛК привела к большому объему кода. В исходном тексте на языке STL такой программы уже невозможно ориентироваться. Выручает только графическая нотация MATLAB Stateflow.

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

Словом централизация кода с точки зрения создания систем на ПЛК удобна если вы работаете в одиночку, без детального утвержденного ТЗ, и с неясным составом оборудования. Но даже в этом случае лучше подумать о более прогрессивных нотациях чем стандартная пятерка: LAD, FBD, SFC, ST, IL.

Источник: https://habr.com/ru/post/581468/

🔗 Как сделать 240 килобайт исходников на ПЛК для управления одними рольставнями

Оставьте комментарий

Войти

Зарегистрироваться

Сбросить пароль

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

Прокрутить вверх