Зачем нужно программное обеспечение контроллеру
Completing the CAPTCHA proves you are a human and gives you temporary access to the web property.
What can I do to prevent this in the future?
If you are on a personal connection, like at home, you can run an anti-virus scan on your device to make sure it is not infected with malware.
If you are at an office or shared network, you can ask the network administrator to run a scan across the network looking for misconfigured or infected devices.
Another way to prevent getting this page in the future is to use Privacy Pass. Check out the browser extension in the Chrome Web Store.
Cloudflare Ray ID: 7216ccfc98578e0e • Your IP : 109.70.150.94 • Performance & security by Cloudflare
ПЛК — что это такое?
Доброго времени суток, уважаемые жители Хабра!
Прочитав пост про программирование ПЛК Siemens серии S7, я залез в поиск по Хабру, и был весьма удивлен, что тема промышленной автоматики вообще, и программирования ПЛК в частности, освещена весьма и весьма скудно. Возьму на себя смелость поделиться своим опытом в данной области, описав базовые принципы программирования ПЛК, в частности, производства компании Beckhoff.
Введение
Я занимаюсь автоматизацией зданий. Сложилось так, что в основном мы строим свои системы на базе ПЛК Beckhoff. Такой выбор был сделан прежде всего потому, что эти контроллеры являются свободно-программируемыми в полном смысле этих слов. Что это значит? Возьмите контроллер TAC Xenta, например, и попробуйте на нем реализовать обмен с внешним устройством через RS232 по собственному протоколу, на уровне «байт послал — байт принял». Не получится, эти контроллеры так не умеют — используйте только те протоколы, которые в них заложил разработчик. А Beckhoff умеет. Но прежде чем лезть в такие дебри, давайте посмотрим на среду разработки? На каком, собственно, языке, мы будем писать?
Стандарт МЭК 61131-3
Промышленные ПЛК программируются на языках стандарта МЭК 61131-3. Всего этих языков 5, некоторые производители добавляют свои. Языки друг на друга совсем не похожи, и, наблюдая за коллегами, могу предположить, что выбор того или иного языка связан прежде всего с тем, чем человек занимался до того, как он пришел в эту отрасль.
- IL, instruction list, список инструкций. Похож на ассемблер. Не видел никого, кто его использовал бы, но подозреваю, что олдскульные кодеры, пробивавшие перфокарты по памяти, оценят.
- LD, ladder diagram. Визуальный язык, для тех, кто занимался разработкой схем релейной автоматики.
- ST, structured text. Более всего напоминает «классические» языки программирования, чем-то похож на Паскаль. Оттого ценится теми, кто до ПЛК занимался программированием на других языках и платформах, в частности — мной.
- FBD, functional block diagram. Этакая блок схема, любим прежде всего технологами, решившими податься в программирование, за свою наглядность.
- SFC, sequential function chart. Графический язык, больше ничего не скажу. Ни разу не видел, чтоб его использовали.
Из не всеми поддерживаемых языков стоит отметить язык CFC (continuous flow chart), Beckhoff его поддерживает. Это дальнейшее развитие языка FBD, одним из наиболее существенных отличий, на мой взгляд, является поддержка явной обратной связи в схемах. Зачем это нужно? Например, вот такой генератор коротких импульсов на CFC будет работать, а на FBD – нет.
Блок TON — это стандартный блок, таймер с задержкой включения. Логика работы: выход Q становится TRUE, когда на входе IN сигнал TRUE в течение не менее времени PT.
Самая популярная, наверное, среда разработки под ПЛК — это CoDeSys. Многие производители берут ее за основу, и либо делают к ней библиотеку для работы со своим ПЛК, либо доделывают среду под себя.
Как работает ПЛК?
Программа ПЛК работает циклично. Время цикла может быть от единиц миллисекунд до единиц секунд, в зависимости от задач, которые на этот ПЛК возложены. Большинство ПЛК позволяют задавать время цикла разработчику программы, однако в некоторых моделях такой возможности нет. Многие ПЛК, в частности Beckhoff, позволяют в одной программе создать более одной циклически выполняемой задачи, и задать приоритет для этих задач. Что нам дает эта возможность?
Представим ситуацию: ПЛК управляет вентиляционной установкой, и к нему подключена панель управления через RS232. Температура в помещениях меняется не быстро, и запускать алгоритм управления вентиляцией чаще, чем раз в 50 — 100 мс просто нет смысла. Зато панель оператора опрашивает контроллер постоянно, и задержка ответа ПЛК более 10 мс уже выражается в «притормаживании» интерфейса пользователя, а при задержке 20 мс у нас переполнится аппаратный буфер COM-порта. Наличие нескольких задач позволяет нам решить эту проблему красиво: пусть «быстрая» задача работает с COM-портом, и вызывается каждые 2 мс, а «медленная» реализует логику работы вентиляции, и вызывается каждые 50 мс. Все работает хорошо, панель оператора не тормозит, пользователь доволен.
А что у этих железок внутри?
- Можно сделать «все в одной коробке» — голова, некий набор входов / выходов, несколько вариантов конфигурации — вот тут у нас входов побольше, тут поменьше, тут голова помощнее, тут послабее. Так делают, например, Carel, и много кто еще. На маленьком проекте такой подход себя в чем-то, может быть, и оправдывает.
- Но лично мне кажется, что большую гибкость дает другой подход. Голова отдельно, и к ней по шине подключается наборный «хвост» из модулей ввода-вывода. Мы ставим те модули, которые нам нужны, и в том количестве, которые нам нужно. Так делают Beckhoff и Siemens, например.
А вот другой вариант — голова Beckhoff серии CX9000 (слева на фото) с набором модулей ввода-вывода.
Помимо всего прочего, на голове еще имеется некая шина, позволяющая объединять ПЛК в сеть, а зачастую еще и менять его программу через эту же сеть. Какая это будет сеть — зависит от ПЛК. Это могут быть и незнакомые тем, кто не сталкивался с промышленными сетями EIA-485, Profibus, CAN, а может быть и вполне привычный Ethernet. Именно через эту сеть, называемую fieldbus, и осуществляется подключение ПЛК к верхнему уровню — к СКАДА-системе, например. На фото выше хорошо видны 2 разъема 8P8C на голове Beckhoff’а — это Ethernet, а у Carel сверху слева видны (плоховато, правда) 2 разъема 6P4C — так они сделали RS-485. У этого интерфейса, к сожалению, нет общепринятого разъема.
Так все же, как под него программы писать-то?
Вообще, это тема не статьи, а целой книги. Но расскажу то, что увидел на личном опыте, и пусть это будет ложкой дегтя.
Для профессиональных программистов освоение ПЛК во многом покажется деградацией. ООП? Их нет у нас, есть только структуры, перечисления, и некое подобие класса, которое называется «функциональный блок». Что такое Private, Public и прочее, тоже можно забыть сразу — не пригодится. Из любого места вашей программы можно получить доступ к любому другому месту.
Динамическое выделение памяти? Их нет у нас совсем. Не уверен, сколько тебе пришлют данных? Выделяй буфер с запасом, и забудь про эту память — освободить ее не получится. Либо проявляй чудеса скорости и обрабатывай данные на лету, если успеешь уложиться в заданное время цикла.
Исключения? Да что вы… видел я одно чудо, которое намертво висло при выполнении конструкции вида:
Понятно, что переполнение, не влазит foo * bar в 16 бит, но зачем же виснуть-то? Да еще так, что ничего, кроме сброса по питанию не помогает.
Среда разработки? Не у всех CoDeSys, многим хочется пооригинальничать и написать что-нить свое. Одна из таких самописных сред вылетала с runtime error при попытке записать число 86400 в 16-битный INT. А вы говорите, обработка исключений на ПЛК. Ее и в среде разработки-то не всегда нормально могут сделать.
НО! Зато для любителей той тонкой грани, которая отделяет железо от программного обеспечения, софта в просторечии — это очень интересная ветвь ай-ти, правда.
Надеюсь, что этот небольшой обзор будет полезен. Если хабрасообществу будет интересна эта тема, то расскажу про ПЛК подробнее.
Что такое программирование контроллеров?
В данной статье рассмотрим программирование Siemens контроллеров в качестве основного примера, так как данный вид ПЛК является одним из наиболее популярных вариантов. Но для большего понимания раскроем также и ряд других марок устройств и особенности разработки программного обеспечения для них.
Общая информация
Начинающие пользователи часто задаются вопросом, что такое программирование логических контроллеров. На деле программный язык этих устройств идентично логике функционирования обычных реле. Поэтому специалисты, ранее работавшие со схемами релейных принципов с легкостью разберутся с созданием программ для ПЛК.

Подключение сигналов и разработка стандартного программирования может различаться для разных марок и моделей PLC, но при этом в общем понимании они все равно будут обладать схожим набором черт и особенностей. Поэтому можно рассмотреть общие принципы.
Прежде следует разобраться с самим устройством:
- простой промышленный логический контроллер спереди включает 2 винтовые клеммы L1 и L2, которые отвечают за подключение внутренних цепей устройства;
- слева находятся 6 винтовых клемм, которые необходимы для подключения входных приборов. Они представляют собой 6 входных каналов;
- в корпусе расположен оптоизолятор для создания электрически изолированного сигнала для схемы ПК при установке связи между клеммой на входе и общей клеммой. Светодиод на входе отображает ситуацию, какой именно из входов сейчас находится под напряжением;
- сигналы на выходе получаются за счет схемотехники контроллера за счет активизации переключающего устройства. Это позволяет связать клемму с источником с помеченным пользователем буквой Y выходом.
Таким образом, PLC программирование базируется на определении, какие выходы находятся под напряжением и какие при этом присутствуют входные условия. Все программы разрабатываются с помощью ПК, который подключается к порту программирования контроллера.
Для программирования промышленных контроллеров используются специальные системы. Для этого существуют 2 возможных варианта:
- производитель PLC предлагает свою программную среду, которая реализована для работы от конкретного разработчика. Распространяются как на платной, так и на бесплатной основе в зависимости от компании и модели;
- компании по разработке ПО занимаются созданием специальных систем программирования для ПЛК от разных производителей.
Программирование Siemens
Сименс ПЛК программирование может понадобиться в следующих случаях:
- происходит в составе с шкафом автоматики используется для управления различными системами автоматизации разного назначения и типа;
- создание пользовательского интерфейса устройств с дисплеями или с одновременным подключением к панели оператора;
- разработка программ для обработки, архивирования и хранения, а также вывода итоговых показаний с внутренними вычислениями самих PLC и от внешних приборов;
- для организации взаимодействия контроллера с системами формата SCADA;
- реализация в составе объемных систем автоматизации, где в схеме подключено сразу несколько ПЛК;
- реализация функционала по взаимодействию в специальных режимах Slave и Master с промышленным оборудованием через протоколы связи.
Программирование Сименс контроллеров осуществляется в определенных средах. Одной из них является TIA Portal, которая предназначена для организации систем автоматизации разного уровня сложности и включает определенный набор программных компонентов: Simatic Step 7, WinCC, PLCSIM. Функционал:
- разработка конфигурации и отладка компонентов систем;
- создание и наладка коммуникационных сетей;
- разработка программного обеспечения для контроллеров;
- организация панелей операторов Simatic и реализация ЧМИ (человеко-машинный интерфейс).
Например, программирование контроллеров Siemens Logo производится, как и в классическом общем случае, после монтажа и настройки прибора. В данном случае простыми словами процесс представляет собой ввод коммутационной схемы. Перечислим основные этапы:
- для начала с помощью стандартной схемы из руководства следует разобраться с расположением соединительных элементов: входов и выходов;
- далее необходимо разобраться с блоками и их номерами. Блоки — это функции, которые отвечают за преобразование данных на входе в информацию на выходе. Поэтому требуется соединить соединительные элементы с помощью выбора необходимого соединения из меню Co. Самыми простыми блоками становятся логические операции. При вставке блока в программу первому назначается определенный номер, который в дальнейшем используется для отображения связей между блоками;
- создание схемы происходит путем соединения блоков с соединительными элементами. Сам процесс начинается с выхода, которым является или реле или нагрузка, за счет которых происходит управление. На этом этапе нужно подключить выключатели S1-S3 к винтовым клеммам;
- после проектирования схемы необходимо произвести ввод и запуск программы. Для этого PLC Siemens Logo подключается к сети, и включается питание. Затем логический контроллер переключается в режим программирования, где на основании предыдущей схемы организуется нужная программа.
Программирование ПЛК Овен
ПЛК Овен программирование осуществляется на языках МЭК 61131-3. Среди них используются IL, FBD, LD, SFC, ST. Как уже говорилось выше, для этого используются среды от производителя (наиболее подходящий вариант) или стороннее ПО. Если речь идет о продукции Овен, то выбор падает на CoDeSys.

Указанная среда программирования Овен контроллеров помогает спроектировать подходящую программу, а также произвести ее отладку и загрузку в ПЛК. Для использования CoDeSys пользователь должен позаботиться о среде исполнения, которую предоставляет производитель или создает сам разработчик.
Помимо этого программирование Овен контроллеров может производиться с помощью инструмента диспетчеризации предприятия MasterSCADA, который может выступать в качестве подходящей среды для разработки и внедрения нужной программы. Преимуществом варианта становится возможность объединения целого множества ПЛК, которые работают на разных системах.
ПЛК Delta
Программирование ПЛК Дельта осуществляется посредством специального пакета WPLSoft, который не нуждается в большом объеме ресурсов персонального компьютера. Поэтому подходит для использования специалистов разных категорий и является очень простым. Здесь применяются 3 языка: LD, SFC и IL.

Главной особенностью процесса здесь становится создание ступенчатых диаграмм, которые в итоге составляют общую программу. Процесс производится построчно. Этот фактор существенно упрощает разработку ПО для PLC Delta.
Schneider Electric
Программирование ПЛК Шнайдер Электрик может быть выполнено с участием одной из нескольких сред: EcoStruxure Machine Expert, EcoStruxure Machine Expert HVAC, Unity Pro, Zelio Soft. Создание программ используется для тех же целей, что и контроллеров марки Siemens. Наиболее часто предназначены для управления технологическими процессами систем автоматизации следующих видов:
- вентиляционное оборудование;
- системы кондиционирования;
- индивидуальные тепловые пункты;
- осветительные системы;
- управления конвейерными линиями и станками;
- водоподготовка;
- упаковочное оборудование;
- грузоподъемные машины и сопутствующие механизмы.
ПЛК Мицубиси
Программирование ПЛК Mitsubishi организуется с помощью среды GX Works2 нового поколения. Поддерживает следующие языки: IL, LD, SFC, LD, FBD, ST. Среда бывает двух видов GX Works2 и GX Works2 FX. Вторая предназначена для настройки контроллеров серии FX:
Функциональные возможности среды программирования для ПЛК Митсубиси:
- параметризация функциональных модулей;
- применение программных библиотек и специальных функциональных блоков;
- моделирование является встроенным внутрь системы для автономной проверки конфигурации и программ;
- широкий спектр функций для диагностики и отладки;
- возможность восстановления предыдущих версий программ и проведения сравнения с текущими;
- совместимость с рядом проектов GX Developer.
Заключение
Программирование Siemens контроллеров, а также ПЛК Delta, Simatic, Сегнетикс, Мицубиши, Berghoff, Овен, Агава и ряда устройств от других производителей происходит всегда по одной и той же схеме. В начале изучаются особенности самого оборудования и определяются подходящие среда и языки программирования.

Далее на основании руководства пользователя можно самостоятельно начать реализовывать требуемые программы. Для начинающих рекомендуется попытаться создать наиболее простые варианты ПО и только потом переходить к более сложноорганизованным.