• Каталог продукции
  • О компании
  • Поддержка
  • OwenCloud
  • Учебный центр
  • Форум
  • Профиль
  • CODESYS V3.5 для enterprise-разработчика. Часть 2

    Важные моменты среды разработки

    Программные объекты

    «Программная» часть приложения CODESYS состоит из различных программных объектов (POU). Существует три типа таких объектов:

    • программы – высокоуровневые программные объекты, привязываемые к циклически вызываемым задачам контроллера. Самое близкое к ним понятие из enterprise-языков – это точки входа в пользовательский код (функция main() и т. п.). Программы являются верхним уровнем абстракции приложения – они соответствуют крупным фрагментам технологического процесса (например, «управление вентиляцией», «обработка тревог» и т. д.);
    • функции – аналогичны функциям в других языках программирования;
    • функциональные блоки – аналоги классов из современных языков программирования. Для использования функциональных блоков нужно объявить их экземпляры (инстансы); для каждого экземпляра выделяется своя область памяти. Ключевое отличие функциональных блоков от функций в том, что переменные блоков сохраняют свои значения между вызовами. Соответственно, функциональные блоки используются для создания счетчиков, таймеров и других объектов, которым требуется сохранение данных.

    Библиотеки

    Среда CODESYS включает богатый набор библиотек с дополнительными функциональными блоками и функциями – генераторами импульсов, регуляторами, блоками чтения/записи файлов и т. д.

    Отдельно расскажем о библиотеке, которая будет важна для тех, кто привык программировать на языке C и использовать функции из string.h (memset, memcpy, memcmp и т. д.). Аналог этой библиотеки в CODESYS называется CAA Memory.

    Пользователь может создавать собственные библиотеки.

    Библиотеки, разработанные компанией ОВЕН, доступны на сайте ОВЕН в разделе CODESYS V3/Библиотеки и компоненты. Большинство этих библиотек поддерживается только контроллерами ОВЕН.

    Синхронное и асинхронное выполнение

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

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

    В примере выше приведена реализация задержки формирования сигнала тревоги (переменная xAlarm) при замыкании дискретного входа ПЛК (переменная xDi) с помощью таймера задержки (экземпляр fbDelay блока TON).

    Фактически – вызов таймера происходит в каждом цикле задачи, но его код начнет выполняться только в тот момент, когда вход IN примет значение TRUE. Выход Q примет значение TRUE спустя 5 секунд, и при этом в течение этого времени инкремент переменной i продолжит выполняться, а не будет остановлен.

    Многие системные библиотеки имеют синхронные и асинхронные варианты реализации. Рассмотрим, например, производственную линию по маркировке бутылок. Бутылки движутся по конвейеру, и контроллер должен успевать организовать наклейку этикеток без пропусков. При этом код, напечатанный на каждой этикетке, нужно сохранять в файл. Запись в файл может занимать непредсказуемое время (это зависит от времени доступа для конкретной модели flash-памяти, размера файла и т. д.), и поэтому, если запись выполняется синхронно, блокируя остальные операции, то время этой итерации цикла может существенно увеличиться, и очередная бутылка будет пропущена. В этом случае разумнее производить запись в асинхронном режиме, тогда она займет несколько итераций цикла задачи, но время выполнения каждого из них будет сравнительно небольшим.

    Синхронные библиотеки построены на использовании функций:

    Асинхронные библиотеки построены на использовании функциональных блоков:

    В примерах выше опущено объявление переменных, открытие файла и т. д. – продемонстрирована лишь сама разница в использовании синхронных и асинхронных операций.

    Также в примерах можно увидеть использование пространств имен (namespaces), характерное и для enterprise-языков. В CODESYS пространства имен присутствуют у библиотек, функциональных блоков, структур, перечислений и некоторых других объектов.

    Отладка

    CODESYS предоставляет удобные средства для отладки проекта. К ним относятся:

    • отображение текущих значений переменных во время онлайн-подключения к контроллеру;
    • возможность задавать и «фиксировать» значения переменных;
    • точки останова, позволяющие прекратить выполнение приложения в момент достижения заданного фрагмента кода и оценить значения переменных в этот момент;
    • пошаговое исполнение приложения;
    • поиск значений в оперативной памяти по заданному паттерну;
    • и т. д.

    Отладка

    Интерфейс IDE

    CODESYS предоставляет разработчику средства, без которых сложно представить современную IDE:

    • подсветка синтаксиса (с возможностью настройки цветов);
    • автодополнение и автоформатирование кода;
    • темная тема для редактора ST;
    • переименование переменной, затрагивающее все фрагменты, в которых она используется;
    • перекрестные ссылки для вызываемых объектов (crossreferences);
    • и т. д.

    Автоматизированные сборка и тестирование

    Современный подход к разработке приложений неразрывно связан с методологией DevOps – непрерывной интеграцией и развертыванием (СI/CD), автоматизированным тестированием, хранением и управлением исходным кодом и т. д.

    Программирование ПЛК пока что не пришло к этой методологии. Тем не менее CODESYS поддерживает ряд отдельных платных плагинов, позволяющих частично решить эти задачи:

    • CODESYS Test Manager – инструмент для автоматического тестирования;
    • CODESYS Git – плагин для подключения к системе управления версиями Git;
    • CODESYS Static Analysis – статический анализатор для проверки соответствия кода заданному набору правил;
    • CODESYS Profiler – профилировщик, позволяющий оценить время выполнения конкретного фрагмента кода для определения «узких мест» в приложении и его последующей оптимизации.

    Кроме того, среда разработки позволяет создавать сценарии на языке Python для автоматизации рутинных операций (фактически вы получаете API для выполнения команд меню, операций в дереве проекта и т. д.). Эти сценарии могут быть добавлены на панель инструментов в виде дополнительных ярлыков.

    Доступ к ОС контроллера

    Один из характерных вопросов, который возникает у enterprise-разработчиков при переходе к программированию ПЛК, – как переиспользовать существующий код. Многие из современных ПЛК используют операционную систему Linux – поэтому возникает естественное желание установить какие-то пакеты, перекомпилировать и использовать свои C/C++ библиотеки, найти toolchain и т. д.

    Большинство контроллеров не являются «открытыми» – то есть пользователь ограничен средствами, которые предоставляет IDE и не может напрямую взаимодействовать с операционной системой ПЛК. Это справедливо и для контроллеров ОВЕН.

    Но для наших пользователей мы предоставляем два инструмента для решения специфических задач:

    • вызов утилит операционной системы контроллера с помощью библиотеки CmpSysExec. В состав прошивки входят хорошо известные разработчикам утилиты curl, jq, клиенты для СУБД MySQL/MSSQL/PostgreSQL, ImageMagick и др. Мы готовы добавлять в прошивку новые утилиты по запросам пользователей;
    • написание скриптов на языке Python. Для этого языка существует множество библиотек, которые могут упростить выполнение нехарактерных для ПЛК задач (например, интеграцию с web-сервисами через REST API, работу с XML и т. д.). В состав прошивки контроллеров ОВЕН входит менеджер пакетов pip3. Вызов скриптов осуществляется через библиотеку CmpSysExec. Скрипты являются лишь дополнением к приложению CODESYS, но не могут служить его заменой.

    Документация и гайдлайны

    Основными источниками по информации о CODESYS является онлайн-справка и документация ОВЕН.

    Для enterprise-языков программирования характерно наличия гайдлайнов, best practices и т. д. Для программирования контроллеров, к сожалению, подобных гайдлайнов довольно мало. Самый известный пример – это гайдлайны от консорциума производителей ПЛК PLCopen. С их русскоязычными переводами можно ознакомиться на этом ресурсе.

    А теперь передаем слово вам

    Если вы enterprise-разработчик, столкнувшийся с ПЛК, пожалуйста, расскажите нам о своем опыте и трудностях, которые возникли при переходе от «обычного» программирования к программированию контроллеров: internet@owen.ru.

    Товар добавлен!
    Модификация:
    Цена:  ₽ ( ₽ за шт. Кратность отгрузки:  шт.)
    Продолжить выбор
    Перейти к оформлению