`

СПЕЦІАЛЬНІ
ПАРТНЕРИ
ПРОЕКТУ

Чи використовує ваша компанія ChatGPT в роботі?

BEST CIO

Определение наиболее профессиональных ИТ-управленцев, лидеров и экспертов в своих отраслях

Человек года

Кто внес наибольший вклад в развитие украинского ИТ-рынка.

Продукт года

Награды «Продукт года» еженедельника «Компьютерное обозрение» за наиболее выдающиеся ИТ-товары

 

IEC 61131-3: языки и средства программирования

Статья опубликована в №7 (575) от 20 февраля

0 
 

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

Вы полагаете, все это будет носиться?
С. Никитин

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

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

Немного истории

Поначалу программы для управляющих вычислителей писались на общепринятых языках: от ассемблера и машинных кодов до Паскаля и С. Однако со временем выяснилось, что для крупного завода с сотнями систем управления нужно держать «в боевой готовности» целый отдел программистов, разбирающихся в десятке архитектур процессоров и контроллеров. Кроме того, в теории ПЛК программируется один раз, а потом работает несколько лет, например, до постановки на производство нового изделия. На практике выяснилось, что есть довольно обширный круг задач, когда перепрошивка программы и даже корректировка алгоритмов может выполняться чаще, чем раз в сутки, причем решение об изменении принимает технолог или оператор.

Тогда же (приблизительно в конце 70-х) ряд компаний стали разрабатывать свое ПО, позволяющее осуществлять непосредственное программирование непрограммистами. Сначала стал применяться язык лестничных диаграмм LD (у нас он известен как РКС). Впрочем, если быть более точным, то этот язык не создавался заново, а просто адаптировался со схем управления на релейной логике, принятых в США. Чуть позднее во Франции появились первые версии языка FBD, похожего на рисование электрической схемы. Создавались также различные варианты «унифицированных» языков типа ассемблера и Паскаля. В то же время, обобщив опыт использования первых ПЛК, были сформулированы основные критерии и требования к данному классу устройств. 1985–1995 гг. прошли под знаком интенсивной разработки и применения различных вариантов специализированных языков. В 90-х наконец-то была разработана группа стандартов IEC 61131, описывающих аспекты создания и эксплуатации ПЛК. Стандарт IEC 61131-3 касался программных средств и в последующие несколько лет был существенно расширен и дополнен. Теперь программные продукты на уровне исходников могут быть перенесены на ПЛК других производителей практически без изменений, а технологи или операторы пользуются ПЛК и при этом им не требуется высшего математического образования. Поначалу специальным ПО занимались ведущие компании-разработчики ПЛК, однако к настоящему моменту сформировался ряд софтверных фирм, занимающихся именно созданием средств разработки IEC 61131-3 и адаптации их к различным аппаратным платформам.

IsaGraf и CoDeSys

IsaGraf в конце 90-х был, пожалуй, наиболее мощным и известным инструментом IEC-программирования. Достаточно сказать, что его использовали такие гранды, как Scneider Electric (контроллеры Modicon) и PEP Modular Computers. Кроме того, IsaGraf был переведен на русский язык и до сих пор является неформальным описанием стандарта IEC61131-3. Разработало его отделение Telemehanique, однако кроме собственно фирменных контроллеров, IsaGraf поддерживал (и поддерживает) ряд независимых платформ.

Продукт CoDeSys от 3SSoftware иллюстрирует противоположный подход, очень близкий нашему менталитету и сформулированный в пословице «гуртом легше і батька бити». Компания изначально создавалась для поддержки контроллеров сторонних производителей, которые хотели иметь надежное и опробованное ПО для конкурентной борьбы с «тяжеловесами» рынка. Эта политика за 8 лет вылилась в отлаженный механизм обобщения опыта применения. С коммерческой точки зрения вариант оказался более выигрышным: так, начальные затраты на адаптацию IsaGraf к своему процессору составляют около 30 тыс. евро при платной среде разработки для конечного пользователя, в то время как для CoDeSys эта сумма равна 20 тыс. евро (10 тыс. собственно на адаптацию и около 10 тыс. – на лицензии). Среда разработки при этом бесплатна. Конечно, обе платформы поддерживают, кроме ПЛК, еще и вариант РС-контроллера, когда ПЛК управляет одноплатный РС. И, разумеется, число аппаратных платформ хоть и достаточно велико, но ограничено. И CoDeSys, и IsaGraf одинаково хорошо совместимы со стандартом, поэтому все последующие примеры могут быть реализованы в обоих пакетах.

IEC-программирование

Итак, что, собственно, представляет собой IEC-программирование? Чтобы ответить на этот вопрос, прежде всего следует уточнить некоторые базовые принципы построения ПЛК. Любая программа, в общем, состоит из трех частей: начало, тело и конец. Посмотрим на подобную структуру с точки зрения систем управления. Очевидно, что понятие «конец программы» здесь будет отсутствовать, потому что техпроцесс в идеале непрерывен и бесконечен (завод должен работать, причем желательно круглосуточно!). Значит, после окончания тела программы должен быть переход на начало, или, другими словами, программа выполняется в цикле, продолжительность которого и является одним из основных параметров ПЛК. С другой стороны, очевидно, что цикл зависит от числа операций, поэтому производители ПЛК указывают либо его минимальное время, либо время цикла для определенного числа команд.

Какие еще особенности функционирования ПЛК? Он работает с реальными сигналами, считывая их с датчиков и передавая на исполнительные механизмы. Опять же очевидно, что в начале каждого цикла ПЛК должен считать все датчики, а в конце цикла записать все данные в исполнительные механизмы. Понятно, что следующими значительными параметрами являются число каналов ввода/вывода с конкретизацией типа, аналоговые они или дискретные (соответственно, переменные WORD или BOOL). И последний важный параметр – наличие и тип интерфейсов с системами верхнего уровня.

Пример программирования

IEC 61131-3 языки и средства программирования
IEC 61131-3 языки и средства программирования
Рис. 1. Программа на языке SFC: основное тело (вверху)и схема процедуры действий и переходов

Попробуем решить типовую, часто встречающуюся задачу дозирования. Пусть есть двое бункерных весов, в каждый бункер поочередно загружается и взвешивается по два ингредиента. Затем все поступает в смеситель, который работает определенное время, после чего выгружает готовую продукцию. Для написания основного тела программы выберем язык SFC (рис. 1).

Исходя из нашего ТЗ видно, что программа будет иметь две параллельные ветви (по количеству весов), и в каждой ветви будет одна процедура ветвления: взвешивается содержимое бункера № 1 либо № 2 (соответственно № 3 и № 4 во второй параллельной ветви). Смешивание и отгрузка возможны только после выполнения всех ветвей. Этот алгоритм и реализован на схеме SFC. В прямоугольниках показаны процедуры действий, именуемые шагами, а на пересечениях – процедуры переходов. Двойная горизонтальная линия указывает на параллельные операции, одинарная – на ветвления по условию. Выход на процедуру MIXER выполняется толь-ко по обеим параллельным ветвям. Рассмотрим одну из них.

Если взвешивание первого ингредиента не состоялось (Wei_1=FALSE), то программа идет по цепочке вниз. На шаге INPUT_TANK1 открывается задвижка бункера № 1. Далее программа ждет на переходе, пока масса взвешенного ингредиента не будет равна константе Сonst 1. Затем программа переходит на процедуру СLOSE_TANK1, в конце которой выставляется флаг Wei_1, и следующее взвешивание производится из бункера TANK2. Ветвь со вторыми весами выполняется параллельно. После процедуры MIXER, осуществляемой до тех пор, пока таймерная переменная не достигнет заданного значения (равного времени смешивания), происходит процедура отгрузки и возврат на начало (по нажатию оператором кнопки NEXT_STEP – следующий замес).

IEC 61131-3 языки и средства программирования

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

При всей необычности программы очевидна ее наглядность. Кроме того, собственно тело программы представляет собой граф состояний и переходов и фактически не требует дополнительного документирования. Кроме того, IsaGraf имеет еще один «диалект» SFC – язык блоксхем с привычными нам ромбиками, прямоугольниками и стрелочками.

Зачем еще четыре?

Однако при всей полезности языка SFC разработчики стандарта не ограничились только им, а ввели еще четыре. Зачем они нужны? Рассмотрим процедуры шагов: ну, например, прямоугольник INPUT_TANK1. В этом шаге контроллер должен открыть задвижку и после этого включить вибратор. Выберем для реализации данного алгоритма ST – привычный большинству программистов «паскалеподобный» язык высокого уровня. Реализация будет выглядеть так:

VENT_TANK1:=TRUE;
VIBR_TANK1:=TRUE.

Пример достаточно нагляден для обычного программиста. Однако если изменить программу, нужно будет технологу или оператору, например, ввести срабатывание по кнопке без фиксации или «замешать» по «И» с каким-нибудь другим датчиком, это будет уже не столь очевидно. Тем более что по определению оператор не учил ни Паскаль, ни С.

Следующим языком является FBD, программирование на котором похоже на рисование электрической схемы. Он очень удобен для создания шагов и процедур с различными регуляторами. Например, при смешивании необходимо контролировать температуру смеси, включая/выключая нагреватель в зависимости от показания датчиков температуры. На языке FBD шаг MIXER будет выглядеть так, как показано на рис. 2.

IEC 61131-3 языки и средства программирования
Рис. 2. Шаг MIXER, реализованный на языке FBD

«Кубик» MAX находит максимальное значение температуры, поступающей с двух датчиков, а «кубик» LIMITALRM выполняет функцию сравнения измеренного значения с «воротами», образованными константами С_lim_hi и C_lim_Lo. Еще более наглядно и удобно выполняются процедуры, связанные с преобразованием данных, работой с системным «железом» контроллера, процедуры реализации различных регуляторов.

Ту же задачу, например с изменением типа кнопки вводом датчика контроля закрытия выходной задвижки весов, можно решить на языке «лестничной» логики LD (рис. 3).

IEC 61131-3 языки и средства программирования
Рис. 3. Решение описанной задачи на языке LD

Данный вид программы проще для понимания «непрограммистом», а кроме того, на языке LD накоплены тома исходников отработанных и проверенных программ, реализованных на контроллерах предыдущих поколений и релейных схемах.

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

Разумеется, обе среды программирования – и IsaGraf, и CoDeSys – обеспечивают отладку по шагам и с точками останова, визуализацию, интерактивное составление списка переменных, создание и использование библиотек, проверку синтаксиса и прочие присущие современной среде программирования атрибуты.

Вернувшись к началу статьи, хочется ответить на вопрос эпиграфа: «Я полагаю, что все это нужно учить». Ибо IEC-решения являются стандартными на мировом рынке, а кратчайший путь для наших разработчиков на этот самый рынок лежит именно через соблюдение мировых стандартов.

Комментарий редакции

Основанный на символах реле и контактов, которыми рисовались монтажные схемы, язык программирования Ladder Diagram (лестничных диаграмм) был понятен обслуживающему персоналу и вскоре стал де-факто языком PLC. Управляющее прикладное ПО при этом писалось на BASIC, FORTH, C, Structured English, Instruction List и множестве «фирменных», защищенных частным правом диалектах. Документация ранних программ PLC была очень бедна или отсутствовала вовсе, что явно не способствовало пониманию и отладке сколько-нибудь крупных программ. Развитие сред программирования PLC несколько улучшило эту ситуацию, однако вплоть до начала 1990-х годов не было никакого формального программного стандарта для PLC.

Международное индустриальное сообщество со временем признало потребность в стандарте и организовало рабочую группу в пределах Международной электротехнической комиссии (International Electrotechnical Commission, IEC), чтобы рассмотреть вопросы полного цикла проектирования PLC. Они включали разработку аппаратных средств, их инсталляцию, тестирование, документацию, программирование и коммуникации. В первой половине 1990-х МЭК издала различные части стандарта IEC 61131, который охватывает полный жизненный цикл PLC, а часть 3 определяет языки программирования и структуру ПО.

Стандарт IEC 61131-3 поощряет хорошо структурированную разработку ПО, ее подробное документирование и обеспечивает возможность гибкого выбора языка из пяти возможных.

Текстовый язык высокого уровня ST обеспечивает структурированное программирование. Его синтаксис очень напоминает Паскаль и поддерживает широкий диапазон стандартных функций и операторов.

Диаграмма функциональных блоков (Function Block Diagram, FBD) – графический язык, позволяющий изображать сигнал и потоки данных функциональными блоками и повторно использовать фрагменты ПО. FBD считается наиболее удобным для выражения взаимосвязи алгоритмов работы системы управления и логики.

Мы уже упоминали лестничные диаграммы. Однако IEC Ladder Diagram позволяет также выполнять связь определенных пользователем функциональных блоков и функций и, соответственно, может использоваться в иерархических проектах.

Список инструкций (Instruction List, IL) похож на низкоуровневый, ассемблероподобный язык, и его предпочитают применять большинство разработчиков современных PLC.

Наконец, последовательная функциональная диаграмма (Sequential Function Chart, SFC) представляет собой графический язык для изображения поведения системы управления во времени и при наступлении тех или иных случаев.

Стандарты IEC 61131 с 2001 г. официально применяются в России: введен ГОСТ Р 51841-2001, а в Украине с 2002 г. можно ориентироваться на ДСТУ 4108-2002, которые являются не чем иным, как переведенным и адаптированным стандартом IEC 61131-2 «ПРОГРАММИРУЕМЫЕ КОНТРОЛЛЕРЫ. Общие технические требования и методы испытаний». В настоящее время службами Госстандарта проводятся работы по адаптации остальных разделов IEC 61131.

Ready, set, buy! Посібник для початківців - як придбати Copilot для Microsoft 365

0 
 

Напечатать Отправить другу

Читайте также

 

Ukraine

 

  •  Home  •  Ринок  •  IТ-директор  •  CloudComputing  •  Hard  •  Soft  •  Мережі  •  Безпека  •  Наука  •  IoT