Язык программирования sfc codesys
Общие сведения о языке SFC¶
SFC (Sequential Function Chart) расшифровывается как «Последовательность функциональных диаграмм», и является одним из языков стандарта IEC 61131-3. SFC позволяет легко описывать последовательность протекания процессов в системе.
SFC осуществляет последовательное управление процессом, базируясь на системе условий, передающих управления с одной операции на другую. Язык SFC состоит из конечного числа базовых элементов, которые используются как блоки для построения целостного алгоритма протекания программы.
Основные понятия языка SFC¶
Язык SFC использует следующие структурные элементы для создания программы: шаг (и начальный шаг), переход, блок действий, прыжок и связи типа дивергенция и конвергенция.
После вызова программного модуля, описанного языком SFC, первым выполняется начальный шаг. Шаг, выполняемый в данный момент, называется активным. Действия, связанные с активным шагом, выполняются один раз в каждом управляющем цикле. В режиме выполнения активные шаги выделяются салатовым цветом. Следующий за активным шагом шаг станет активным, только если в переходе между этими шагами условие будет истинно.
В каждом управляющем цикле будут выполнены действия, содержащиеся в активных шагах. Далее проверяются условия перехода, и, возможно, уже другие шаги становятся активными, но выполняться они будут уже в следующем цикле.
Далее описывается каждый элемент SFC диаграммы.
Наиболее важным элементом языка SFC является шаг, который описывает одну операцию. Шаг изображается в виде прямоугольника с собственным именем внутри (см. рис. 7.1).
Рис. 7.1 – Графическое представление «Шага» языка SFC
У каждого шага может быть 3 контакта. Сверху и снизу для соединения с переходом и справа для соединения с блоком действий. Шаг предваряется переходом, который определяет условие для активации данного шага в процессе выполнения программы и отображается в виде горизонтальной черты на ветви диаграммы процесса с указанием имени и условия. Два шага никогда не могут быть соединены непосредственно, они должны всегда отделяться переходом (см. рис. 7.2).
Рис. 7.2 – Шаги «step2» и «step3», соединённые переходом «tr2_3»
Любая SFC диаграмма должна содержать начальный шаг (шаг, выделенный двойной рамкой), с которого начинается выполнение диаграммы.
Переход¶
Между шагами находятся так называемые переходы. Условием перехода может быть логическая переменная или константа, логический адрес или логическое выражение, описанное на любом языке. Условие может включать серию инструкций, образующих логический результат, в виде ST выражения, например:
На рис. 7.4 представлен переход между шагами «Step6» и «Step7» в виде обычного условия:
Рис. 7.4 – Переход между шагами «step6» и «step7» с предопределённым условием «transition4»
На рис. 7.5 представлен переход между шагами «Step8» и «Step9» в виде значения логического выражения «AND» на языке FBD:
Рис. 7.5 – Переход между шагами «step8» и «step9», заданный «логическим И» на языке FBD
Условие не должно содержать присваивания, вызов программ и экземпляров функциональных блоков.
Блок действий¶
Каждый шаг имеет нулевое или большее количеством действий, объединённых, как правило, на диаграмме, в блок действий. На рис. 7.6 показан примера шага «evaluateStep» и связанный с ним блок действий.
Рис. 7.6 – Шаг «evaluateStep» и связанный с ним блок действий, содержащий 3 действия
Блок действий определяет операции, которые должны выполняться при активации (выполнении) шага. Шаги без связанного блока действий идентифицируются как ждущий шаг. Блок действий может состоять из предопределённых действий. Каждому предопределённому действию присваивается имя (на рис. 7.6 это «action0» и «action1»). Одно действие может использоваться сразу в нескольких шагах. Действие может выполняться непрерывно, пока активен шаг, либо единожды. Это определяется специальными квалификаторами, описание которых приведено в таблице 6. Квалификаторы также могут ограничивать время выполнения каждого действия в шаге.
«Прыжок» – переход на произвольный шаг¶
Шаг может быть также заменён «прыжком». Последовательности шагов всегда ассоциируются с прыжком к другому шагу той же самой последовательности шагов. Это означает, что они выполняются циклически. Переход на произвольный шаг – это соединение на шаг, имя которого указано под знаком «прыжка». Такие переходы нужны для того, чтобы избежать пересекающихся и идущих вверх соединений. На рис. 7.7 показана SFC диаграмма, содержащая два «прыжка».
Рис. 7.7 – SFC диаграмма, содержащая «прыжки»
Первый делает переход к шагу «init» в случае выполнения условия «transition4», второй делает переход к шагу «step1», в случае выполнения условия «transition2».
Дивергенция и конвергенция¶
Дивергенция – это множественное соединение в направлении от одного шага к нескольким переходам. Активируется только одна из ветвей. Условия, связанные с различными переходами в начале дивергенции, не являются взаимоисключающими по умолчанию. Взаимоисключение должно быть явно задано в условиях переходов, чтобы гарантировать, что во время выполнения программы активируется одна конкретная ветвь. Пример дивергенции на SFC диаграмме приведён на рис. 7.8 и выделен красным цветом:
Рис. 7.8 – Дивергенция на SFC диаграмме
Конвергенция – это множественное соединение, направленное от нескольких переходов к одному и тому же шагу. Она обычно используется для группировки ветвей SFC – программы, которые берут начало из одинарной дивергенции. Пример конвергенции на SFC диаграмме приведён на рис. 7.9 и выделен красным цветом:
Рис. 7.9 – Конвергенция на SFC диаграмме
Параллельная дивергенция – это множественное соединение, направленное от одного перехода к нескольким шагам. Она соответствует параллельному выполнению операций процесса. Пример параллельной дивергенции на SFC диаграмме приведён на рис. 7.10 и выделен красным цветом:
Рис. 7.10 – Параллельная дивергенция на SFC диаграмме
Параллельная конвергенция – это соединение нескольких шагов к одному и тому же переходу. Обычно она используется для группирования ветвей, взявших начало дивергенции. Пример параллельной конвергенции на SFC диаграмме приведён на рис. 7.11 и выделен красным цветом:
Рис. 7.11 – Параллельная конвергенция на SFC диаграмме
Пример программы на языке SFC¶
На рис. 7.12 приведен пример SFC диаграммы состоящей из начального шага «initStep», шагов «firstStep» и «secondStep» и 3 перехода.
Во время действия «firstStep» выполняется увеличение переменной count на 1. Во время действия «secondStep» из переменной «value» вычитается 10.
Язык непрерывных функциональных схем CFC. Часть 1
Пять основных языков программирования (ST, SFC, FBD, LD, IL), установленных стандартом МЭК 61131-3, используются при написании программ для логических контроллеров. В дополнение к ним CODESYS предлагает язык непрерывных функциональных схем (CFC). Редактор языка и сама его структура интуитивно понятна. Для написания программ не требуется специальных знаний. Именно поэтому CFC является языком выбора для начинающих программистов.
Начиная с 1993 года стандартом IEC 61131-3 (МЭК 61131-3) определено пять основных языков (ST, SFC, FBD, LD, IL) для программирования логических контроллеров. Из них наиболее простым в изучении и удобным в работе является графический язык FBD.
Некоторые компании для облегчения программирования внедряют в свои программные продукты языки, не входящие в стандарт МЭК. Например, CODESYS использует язык непрерывных функциональных схем (CFC), как вариант языка FBD. Язык удобен для прикладных специалистов, не имеющих специальной подготовки в области информатики.
Принципиальное отличие CFC от FBD заключается в том, что в редакторе CFC размещать компоненты программы (функциональные и логические блоки) и задавать порядок их выполнения можно произвольным образом. Такие возможности позволяют легко реализовывать обратные связи, что удобно при разработке схем регулирования. При создании программ на CFC необходимо вручную выстраивать связи между элементами, в то время как на FBD соединения выполняются автоматически.
Свойства редактора CFC
Существуют две разновидности редактора CFC: стандартный (рис. 1) и страничный (рис. 2). Выбрать тип редактора можно при создании нового проекта или при добавлении POU (компонент организации программы) в уже существующий проект
Рис. 1
Рис. 2
Страничный тип редактора CFC удобен при создании проектов, содержащих большое количество последовательно выполняющихся частей программы. Постраничное размещение программы позволяет быстро переключаться между ее разделами, акцентировать внимание только на необходимых элементах, снижает риск построения ошибочных связей и делает проект интуитивно понятным. При работе программы страницы выполняются последовательно, а передача информации с одной страницы на другую осуществляется с помощью меток соединения.
Стандартный тип редактора CFC более популярен среди пользователей, так как обладает рядом преимуществ: наглядность представления кода (все блоки и связи между ними расположены на единой рабочей области), не требуется переключения между страницами, что позволяет избежать лишних действий при написании кода.
Важно помнить, что стандартный и страничный типы редактора не конвертируются один в другой.
Общие свойства блоков
Программа на языке CFC начинается с добавления блоков на рабочую область редактора. Нужный блок добавляется мышкой с панели инструментов.
Блоки имеют фиксированное значение входных и выходных контактов. Можно добавить дополнительные контакты с панели инструментов Входной и Выходной контакт или из пункта: Контакты, контекстного меню, вызываемого нажатием ПКМ на рабочей области редактора.
При работе с большим числом ФБ могут остаться не задействованными входные/выходные контакты. Для компактности программы их можно удалить. При необходимости удаленные контакты всегда можно восстановить функцией сброс контактов. Операции удаления и сброса контактов выполняются аналогично добавлению входных и выходных контактов, а также при помощи соответствующих кнопок на панели инструментов. Чтобы поменять порядок входных/выходных контактов, необходимо их удалить, а потом заново добавить в нужном порядке.
После создания блока начинается этап создания входов и выходов путем перемещения их с панели инструментов. Если блок имеет два-три входных/выходных контакта, то операция занимает мало времени. Если у блока большое число контактов, то потребуется оптимизировать процесс. Необходимо выделить входной или выходной контакт блока и начать вводить имя переменной или константу. Таким образом выход будет добавляться автоматически столько раз, сколько потребуется (рис. 3).
Существует еще один способ добавления входа/выхода блока сразу с переменной. Для этого переменные задаются в разделе программы VAR: выделяется имя переменной и перемещается к нужному входному или выходному контакту блока.
При формировании логики программы блоки добавляются, как правило, в произвольном порядке и так же строятся связи между ними. Это приводит к тому, что нумерация блоков отличается от последовательности их расположения (порядка выполнения) (рис. 4). Чтобы соблюсти очередность выполнения (рис. 5), нужно перед запуском программы нажать ПКМ на рабочем поле редактора CFC и в меню Порядок выполнения, выбрать пункт Упорядочить в соответствии с потоком данных.
Рис. 4
Рис. 5
В версии CODESYS V3.5 SP15 появилась новая опция – автоматическая нумерация блоков в соответствии с потоком данных. Теперь элементы можно добавлять на рабочую область редактора в любом порядке и как угодно перемещать. Автоматическая нумерация элементов программы установлена по умолчанию. Вместе с тем сохранена нумерация элементов в режиме заданного порядка выполнения. Переключаться между режимами можно из свойств POU на вкладке: Порядок выполнения CFC. Посмотреть номера элементов при автоматической нумерации (рис. 6) можно из пункта контекстного меню Порядок выполнения с помощью кнопки Показать порядок выполнения или с помощью этой же кнопки, расположенной на панели инструментов.
Функциональные блоки и структуры
При работе с ФБ, имеющими большое количество входов/выходов, или структурами, содержащими большое количество переменных, удобно использовать компоновщик и селектор (рис. 7), которые находятся на панели инструментов.
Компоновщик упаковывает входы ФБ или структуры, а селектор распаковывает в отдельные выходы, таким образом заменяется большое количество близко расположенных линий связи на одну. Такой подход позволяет избежать ошибок и ускорить процесс компоновки и перемещения блоков, а также экономит место на рабочей области редактора и делает код программы нагляднее.
Линии связи
Для построения линии связи между двумя элементами нужно соединить контакты двух блоков. В редакторе CFC реализован ряд полезных функций по построению линий свиязи. Функция автосоединения линий связи по умолчанию активна, ее можно включить или отключить в меню Инструменты, пункт Опции. Для автосоединения необходимо вплотную приблизить контакты элементов. Существует поддержка параллельной связи от одного элемента к многим другим (рис. 3).
Если линия связи целиком не умещается на экране монитора, нужно выделить один из контактов линии связи (зажать клавишу + нажать стрелку ), тогда рабочая область сама сдвинется к входным или выходным контактам.
Для того чтобы избежать проблем из-за наличия большого количества линий связи, в стандартном редакторе CFC используют соединительные метки (рис. 8). Единственная задача меток – заменить длинные нечитаемые линии связи. Соединительные метки можно установить с панели инструментов. Сначала добавляется метка выхода (ей автоматически присваивается идентификационный номер), затем добавляется метка входа, и ей присваивается соответствующий номер. Заменить линию связи метками можно в пункте Метка соединения контекстного меню, вызываемого нажатием ПКМ на самой линии или на соответствующем входе/выходе. Аналогичным образом можно восстановить линию из меток.
В страничном редакторе CFC нельзя добавить соединительную метку на рабочую область (заменить ими линии связи), так как они выполняют другую задачу. Соединительные метки служат входами и выходами на страницах проекта – осуществляют передачу данных с одной страницы на другую (рис. 9). Метки добавляются не на рабочей области, что улучшает наглядность проекта и экономит место непосредственно на рабочей области редактора.
Оформление и компоновка программ
В редакторе CFC существует возможность печати проекта с двумя типами подгонки – Постер и Страница, выбрать один из них можно в меню Инструменты, в пункте Опции. По умолчанию стоит печать постером. Перед печатью проекта можно выполнить его предварительный просмотр в пункте Файл.
Во второй части статьи речь пойдет о реализации условий на языке CFC; особенностях работы с элементами, охваченными обратной связью; свойствах раздела VAR_INPUT CONSTANT в ФБ; кастомизации проектов и других важных особенностях работы с CFC.
© Автоматизация и Производство, 2021. Все права защищены. Любое использование материалов допускается только с согласия редакции. За достоверность сведений, представленных в журнале, ответственность несут авторы статей.
Издание зарегистрировано Федеральной службой по надзору в сфере связи, информационных технологий и массовых коммуникаций. Свидетельство о регистрации средств массовой информации ПИ № ФС77-68720.
CODESYS для программирования встраиваемых систем
В системах промышленной автоматизации базовым интеллектуальным элементом является программируемый логический контроллер (ПЛК) [1, 2, 3, 6, 7]. С точки зрения программирования главная особенность ПЛК состоит в том, что для работы с ним не требуется образование в области информатики. Инструменты и языки программирования ПЛК должны быть максимально просты и в то же время эффективны. Упрощение использования не должно повлечь за собой ограничение круга решаемых задач.
Рис. Эволюционный набор для PLC Core модулей SYSTEC с системой исполнения и визуализацией CODESYS V3
Для удовлетворения этих противоречивых требований были созданы специальные языки программирования. В 1982 г. вышла первая редакция международного стандарта МЭК61131-3 (далее МЭК). В нем определено пять языков программирования ПЛК: три оригинальных визуальных и два, пришедших из мира компьютеров. Так, к первым относятся языки «релейных схем» (Ladder Diagram, LD), «функциональных блоковых диаграмм» (Function Block Diagram, FBD) и «последовательных функциональных схем» (Sequential Function Chart, SFC). А «Список инструкций» (Instruction List, IL) — это аппаратно-независимый ассемблер. Высокоуровневый язык «структурированный текст» (Structured Text, ST) представляет собой модифицированный Паскаль. Отдельные программные компоненты можно описывать на разных языках МЭК даже в одном проекте. В зависимости от уровня подготовки, типа решаемой задачи и личных предпочтений прикладной МЭК-программист выбирает оптимальный язык.
Создание качественного транслятора языка программирования высокого уровня является сложной и трудоемкой задачей. Для графических языков объем работы увеличивается за счет необходимости создания соответствующего графического редактора и отладчика. Поэтому задача поддержать несколько разных языков в одной программной среде стала серьезной проблемой для многих изготовителей ПЛК. В итоге это привело к возникновению компаний, специализирующихся на создании универсальных сред программирования на языках МЭК. Одной из наиболее успешных оказалась немецкая 3S-Smart Software Solutions GmbH со своим комплексом CODESYS.
CODESYS включает в себя редакторы и трансляторы для всех пяти стандартных языков с рядом существенных расширений. Он также поддерживает значительное число специализированных отладочных и сервисных функций. На сегодня CODESYS — мировой лидер среди МЭК-комплексов. С его помощью ежегодно программируется более полумиллиона контроллеров. После долгих лет горячих споров 18.01.2013 г. была одобрена третья редакция стандарта МЭК 61131-3. В нее вошли оригинальные объектно-ориентированные расширения языков МЭК [4], впервые реализованные в комплексе CODESYS V3. Таким образом, CODESYS создал новый международный стандарт. Описанию его составляющих, приемам эффективной работы и практике применения посвящено несколько книг и множество статей [1, 3, 6, 7, 8, 9].
Аспекты программиста
Чаще всего программисты встраиваемых систем противопоставляют CODESYS интегрированным компиляторам языка С/C++. Попробуем сравнить их технически (результаты сравнения приведены в таблице).
С++ | CODESYS |
1. Трансляция кода/Среда программирования | |
Компиляторы генерируют машинный код с качественной оптимизацией по размеру и быстродействию. Для разных семейств микропроцессоров обычно применяются разные компиляторы. Как правило, обновление версий компиляторов идет независимо от среды программирования. | Встроенные компиляторы генерируют машинный код с оптимизацией по надежности и переносимости. Тысячи разных устройств, на разных микропроцессорах, используют одинаковые компиляторы, что обеспечивает их качество. Обновление компиляторов идет вместе с обновлением среды программирования. Но есть опция выбора версии компилятора. Это позволяет исключить риск при правке старых проектов. |
2. Интерфейс с системным уровнем (API) | |
Функции чтения входов и записи выходов нужно писать в программе. На разных аппаратных платформах интерфейс с системным уровнем разный. Он меняется при замене процессора или ОС. | МЭК-программа работает с образом входов/выходов. Их обслуживает система исполнения. Доступ к специфическим устройствам выполняется через системные библиотеки. |
3. Переносимость | |
Многие функции прикладного кода могут быть использованы повторно. Системно-зависимые интерфейсы нужно адаптировать. | Если набор ресурсов (порты, полевые сети и др.) не изменился, то программа переносится без изменений. Необходимо переконфигурировать ввод/вывод и адаптировать системно-зависимые библиотеки. |
4. Удобство прикладного программирования | |
Естественная среда для компьютерных программистов, чего не скажешь о сервисном персонале. Модификации прикладного кода могут влиять на стабильности системы в целом. Должны выполняться только опытными программистами. | Семь различных языков программирования, включая графические, позволяют программисту создавать код так, чтобы он был понятен прикладным специалистам и обслуживающему персоналу. Программист может выбирать оптимальный язык для разных функций. |
5. Разделение между верхним/прикладным/пользовательским уровнем управляющей программы и системным уровнем | |
Не реализовано. Для понимания работы управляющей программы нужно предварительно иметь представление об организации программного обеспечения в целом. | Правильно организованное МЭК-приложение имеет два или более уровня с четким разделением. Верхний уровень отображает общую структуру и алгоритмы управления. Это позволяет понимать работу системы обслуживающему персоналу, не имеющему специальной подготовки. Внутренние детали приложения скрыты (защищены) в функциональных блоках и библиотеках. |
6. Объектно-ориентированное программирование (ООП) | |
Было сильнейшим аргументом в пользу выбора C++ до выхода CODESYS V3. | Поддержано в CODESYS V3 для всех языков. Позволяет использовать современную технологию организации приложений. |
7. Графический интерфейс оператора (HMI) | |
Возможен. Требует написания дополнительного кода или использования вспомогательных инструментов. Интерфейс отображения должен быть адаптирован для разных устройств вывода. | Встроенный графический редактор с набором типовых элементов отображения и ввода. Для управления графическим элементом нужно ввести наименования переменных программы в соответствующие поля. Визуализация отображается в среде программирования, на графической панели устройства или через Интернет. Способ отображения выбирается в диалоговом окне. |
8. Отладка | |
Среды программирования имеют встроенные отладчики. Дополнительные функции, типа графической трассировки, фиксации значений переменных, не практикуются. | Полная поддержка общепринятых отладочных функций (выполнение по шагам, условные точки останова, стек вызовов и т. д.) на всех языках МЭК. Дополнительные функции для отладки и обслуживания системы в целом (графическая трассировка, менеджер рецептов, фиксация переменных, визуализация). Возможно визуальное моделирование объекта управления. |
9. Реальное время | |
Определяется организацией программы. Зависит от ОС. Может вызвать ограничения при отладке. | Обеспечивается системой исполнения. В прикладной программе усилий не требует. |
10. Поддержка стандартных полевых сетей (Fieldbus) | |
Не включена. Требуется дополнительное ПО, реализующее стек протокола, и отдельный конфигуратор. Стеки аппаратно-зависимы. Конфигуратор (если есть) обычно не интегрирован в среду программирования. Символьное отображение входов/выходов проблематично. | Интегрированные конфигураторы и стеки полевых сетей. Стеки полевых сетей написаны в среде CODESYS и независимы от нижнего уровня. Нужный стек компилируется и линкуется с приложением автоматически. |
11. Специализированный инструментарий для прикладных областей | |
Нужно программировать самим или приобретать дополнительные инструменты. Интеграция обычно требует разделяемой памяти. Контроль движения и логика управляются разными процессами. | Интегрированный механизм сохраняемых переменных. Мониторинг входов и управление выходами без программирования. Специализированные прикладные библиотеки. Встроенная система управления движением (Soft Motion CAM/CNC), 3D-редактор перемещений, интерпретатор G-кодов (ЧПУ). Работает в одном процессе, единая адресация. |
12. Командная работа/управление версиями | |
Большинство сред разработки поддерживают контроль версий. | Поддерживается путем установки специального плагина для интеграции с Subversion. |
13. Быстрое создание/тиражирование однотипных систем | |
Существуют специальные приемы и инструменты, ускоряющие работу программиста. | Пакет CODESYS Application Composer позволяет конструировать приложения с автоматической генерацией надежного кода. Приложение составляется из готовых настраиваемых блоков без программирования. |
14. Поддержка новых стандартов на рынке систем управления | |
Нужно отслеживать и делать самостоятельно, заказывать или приобретать сторонние разработки. | Функционал, соответствующий новейшим мировым стандартам, наращивается постоянно. Например: FDT, OPC UA, EtherCAT, CANopen, PROFINET, ASi и т. д. |
15. Контроль целостности/защита копирования | |
Нет. Реализуется программно. | Встроенная защита модификации кода, уникальный идентификатор проекта. Опционально: шифрование проекта, многоуровневая система прав доступа, сохранение исходных текстов в памяти устройства. |
Как показано в таблице, для человека, имеющего образование по специальности программирование, C/C++ является естественным выбором. Переход к использованию МЭК-языков потребует некоторых усилий по освоению. Обычно начальный дискомфорт в CODESYS вызывает отсутствие главного цикла и функций ввода/вывода, которые полностью «спрятаны» в системе исполнения. Существенно отличается работа с таймерами. Ближе всего к языку C в CODESYS язык ST. Как правило, для его уверенного освоения программисту достаточно нескольких часов [5].
Использование МЭК-языков может не дать явных преимуществ мгновенно. Они проявляются ярко при необходимости пояснения прикладной программы другим людям. В этом смысле весьма эффективна связка языков SFC и ST. Диаграмма SFC визуально представляет интуитивно понятный алгоритм работы, буквально «оживающий» в онлайновом режиме. Действия шагов SFC описываются на привычном высокоуровневом языке ST.
Аспекты руководителя
Некоторые успешные практические применения CODESYS во встраиваемых системах инициировались не техническими специалистами, а менеджментом компании. Чаще всего главной причиной становилась одна из четырех, перечисленных ниже.
Проблема правильной организации работ
Как правило, в компании есть системный программист с соответствующим образованием. Он начинает с «оживления» платы, установки операционной системы (ОС) или самостоятельной разработки необходимого функционала нижнего уровня. Кажется логичным, чтобы он продолжил работу над системой далее, включая прикладные функции. Ему приходится потратить немало времени на то, чтобы разобраться с прикладной сферой. Будь то газовый котел, система управления яхты, пульт авиационного тягача или что угодно, постепенно он начнет ориентироваться в теме не хуже заказчика. Иногда даже лучше, поскольку вынужден разобраться с причинно-следственными связями и выстроить алгоритмы. В итоге компания приобретает абсолютно уникального специалиста. Работа успешно сдается. Далее становится ясным, что только этот специалист способен сопровождать систему. Его нельзя отвлекать или заменять, нельзя предоставить отпуск или уволить. Компания попадает в зависимость от специалиста.
Рис. Самолетный тягачком пании TREPEL. Вместо обычных рычагов управления он оснащен встраиваемым панельным PC c CODESYS компании Janz Tec
Вначале сам программист рад своей уникальной позиции. По прошествии нескольких лет он замечает, что «золотой фонтан» не забил, а работа стала утомительной. Он отстал от новых технологий по основной специальности. Сменить работу не реально. Проблема возникает с двух сторон.
CODESYS выручает благодаря свойствам 2 и 5 (см. таблицу). Нижним уровнем, включая установку системы исполнения CODESYS, занимаются системные программисты. Прикладной проект делается в CODESYS специалистами по прикладной области. Благодаря 4, им не требуется специальное образование. Системный и прикладной уровни четко разделены, как и требования к их исполнителям. При необходимости сопровождение ПО может быть передано заказчику. Специалистам заказчика достаточно пройти двухдневные учебные курсы.
Проблема развития универсальности системы и расширения рынка сбыта
Рис. Пульт управления яхтой, разработанный компанией Exor
Если устройство оказалось востребованным, то постепенно возникает необходимость специальных исполнений для разных заказчиков. Появляется несколько «прошивок» программы. Потом разрабатывается специальная компьютерная программа — конфигуратор системы. Она настраивает параметры устройства. Постепенно число параметров возрастает. Соответственно, разбухает документация. Но по-прежнему находятся заказчики, которым не хватает нужного именно им функционала. Рождается логичная мысль пойти дальше и дать заказчикам (дистрибьюторам, установщикам) возможности программирования системы. С языком C++ это нереально. CODESYS решает данную проблему. Существует ряд специализированных контроллеров для печатных машин, деревообрабатывающих станков, заправочных станций, дорожных машин, химических аналитических приборов и др., которые оснащены CODESYS и дополнены специализированными библиотеками. Изготовитель соответствующей машины сам адаптирует контроллер под разнообразные модели и наращивает функционал. Изготовитель встраиваемой системы выигрывает за счет унификации и расширения областей применения.
В простых устройствах выручает встроенная визуализация CODESYS (п. 7 таблицы). С ее помощью графические конфигураторы, включая веб-интерфейс, делаются «попутно» на ранних версиях прикладного проекта.
Проблема интеграции с устройствами других компаний
Обычно в успешно развивающейся системе возникает необходимость подключения приборов, датчиков и других устройств ведущих мировых изготовителей. Самостоятельная реализация стандартных полевых сетей значительна по трудоемкости. Покупка готового стека дорога. CODESYS (см. п. 10 таблицы) позволяет поддержать практически все стандартные сети. В нашей практике к использованию CODESYS во встраиваемых системах чаще других приводила необходимость поддержки стеков CANopen и EtherCAT.
Проблема замены ПЛК встраиваемой системой
В некоторых случаях, помимо базового серийного изделия, требуются особые исполнения. Пример: компактный холодильник и заказная холодильная установка, различные термокамеры, весы, сварочные автоматы, научное оборудование и др. Под специальное исполнение целесообразно применить готовый ПЛК с CODESYS. На нашем рынке доступны десятки таких ПЛК разных ценовых категорий. В разных применениях могут использоваться компактные, модульные или панельные ПЛК. Для серийных изделий изготавливается собственный встраиваемый контроллер. Если везде стоит CODESYS, то одна команда справляется с разработкой ПО и сопровождением всех вариантов. Практически везде применяется один проект с разной конфигурацией.
Установка к CODESYS
Для того чтобы устройство программировалось в CODESYS, в нем предварительно должна быть установлена так называемая система исполнения CODESYS Control. Она включает планировщик задач, загрузчик, функции отладки, обслуживает полевые сети, ввод/вывод и т. д. Именно благодаря ей МЭК-программа оказывается аппаратно-независимой. Набор ресурсов, которые должна обслуживать система исполнения, отличается у разных контроллеров. Речь идет не только о микроконтроллере, но и об устройстве в целом. По этой причине нельзя просто скопировать систему исполнения с одного устройства на другое. Она всегда требует некоторой индивидуальной адаптации. Все существующие встраиваемые системы с CODESYS созданы одним из трех способов:
По требованию российских заказчиков Beck создала специальное исполнение чипов с расширенным температурным диапазоном (–40 °С). Существует исполнение для энергетики с поддержкой коммуникационной библиотеки МЭК 61850.
Первый путь выбирают крупные изготовители встраиваемых систем. Он оправдан при выпуске от нескольких сотен изделий в год и выше. В странах ЕС все более развивается практика заказа разработки. По числу применений в России лидирует технология Beck IPC@CHIP. В любом случае среда программирования CODESYS поставляется бесплатно. Никаких ограничений в функционале и числе установок в ней не предусмотрено. В CODESYS имеется встроенный эмулятор контроллера. Это позволяет начать работу без приобретения аппаратных средств.
Рис. «Беспилотный» транспортер E&K AUTOMATION на базе собственного встроенного контроллера и модулей ввода/вывода Wago IO
Заключение
Сегмент встраиваемых систем в суммарном годовом объеме применений CODESYS ежегодно увеличивается. CODESYS применяется во встраиваемых контроллерах компаний Bosh, Rolls-Royce Marine, Praxis, CC Systems, Moba и др. Это далеко не опытные прототипы, речь идет о десятках тысяч изделий. Примеры нескольких применений показаны на фотографиях.
Среди МЭК-систем программированиия CODESYS выделяется тем, что, подобно компиляторам С/С++, непосредственно генерирует надежный и компактный машинный код, пригодный для встраиваемых систем. Простые в освоении языки МЭК позволяют привлечь к разработке и сопровождению специалистов прикладной области. Интерес для разработчика встраиваемых систем может представлять богатый функционал комплекса CODESYS. Многозадачность реального времени, обработка событий, встроенная визуализация, развитый набор коммуникаций, «горячее» обновление кода, полевые сети, поддержка управления через Интернет, средства национальной локализации проектов и другие функции CODESYS могут быть не востребованы во встраиваемой системе изначально. Но необходимо учитывать, что все они создавались эволюционно, исходя из практических требований, возникавших у пользователей контроллеров в разных странах, разных условиях и на разных этапах работ. В процессе жизни встраиваемой системы неизбежно возникают аналогичные или близкие задачи. Например, задача настройки и тестирования оборудования заказчиком, интеграция с другим оборудованием, веб-интерфейс и т. п. Во многих случаях CODESYS даст готовое решение.