Главная/Портфолио/«Нефтепромавтоматика»: как разработать no-code платформу для программирования микроконтроллеров

«Нефтепромавтоматика»: как разработать no-code платформу для программирования микроконтроллеров

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

Цель проекта: помочь нашему клиенту быстрее масштабировать бизнес и предоставить его заказчикам инструмент, позволяющий настраивать устройства самостоятельно, не привлекая разработчиков.

О клиенте и его продукции

Компания «Нефтепромавтоматика» с 1975 года помогает нефтяникам по всей России: строит АЗС, прокладывает нефтепроводы, устанавливает и ремонтирует оборудование для добычи нефти и газа, автоматизирует процессы.

Инженеры компании создают системы сбора данных и контроля на базе собственных промышленных контроллеров. Среди заказчиков «Нефтепромавтоматики» — крупнейшие предприятия страны: «Газпром», «Лукойл» и «Роснефть».

Что такое контроллер, и как он используется?

Это устройство, которое меняет поведение одного механизма за счет поведения другого.

Пример: водоснабжение в высотных зданиях требует высокого давления в трубах. Давление регулируется насосами, а управляет этим процессом контроллер. Он следит за сигналами от датчиков давления и запускает насосы, если они показывают спад. Благодаря этому в пентхаусе на 21-м этаже вода идет с тем же напором, что в однушке на 3-м.

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

На фото ниже — контроллер БРИГ-015 от «Нефтепромавтоматики».

С какой сложностью столкнулся клиент

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

Но программирование контроллеров — особая специализация. Программист должен не только владеть сложным языком C, но и понимать внутреннее устройство контроллера, чтобы правильно настроить обработку сигналов.

Клиент заметил: многие заказчики его компании не могут сами писать прошивки. Поэтому компании пришлось не только продавать устройства, но и брать на себя их настройку.

Это создало сложную систему поддержки. Специалистов компании нашего клиента стали вызывать не только при установке, но и при любых изменениях.

Например, если в нефтепроводе меняют старый насос на новый, нужно обновлять прошивку контроллера — и тут не обойтись без специалиста по программированию на языке C. Этих разработчиков на рынке немного, а их услуги стоят дорого, ведь низкоуровневое программирование требует редкой экспертизы.

Такая система неудобна всем:

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

Задача

Нам предстояло автоматизировать процесс так, чтобы заказчики компании «Нефтепромавтоматика» могли менять настройки оборудования сами, без обращения к производителю.

Клиент решил использовать no-code / low-code подход. В этих редакторах пользователь работает с графическим интерфейсом, а программа сама генерирует готовый код. Но это «верхушка айсберга». Наша задача намного глубже: вместо веб-кода нужно было обеспечить создание низкоуровневого системного кода из графических схем.

Вызовы проекта

  • Проект состоял из двух частей: с одной стороны, нужно было разработать графический редактор, с другой — конвертер схем в прошивку для контроллера. Схемы могут описывать самые разные процессы — всё предусмотреть просто невозможно. Поэтому мы работали без готового ТЗ: погружались в тему и уточняли детали в диалоге с заказчиком.
  • Тестирование в этом проекте тоже стало вызовом: если веб-приложение можно проверить на тестовом стенде, то контроллер для управления давлением в нефтепроводе в офисе не испытаешь.

Клиент прислал нам один из своих контроллеров с документацией. Использовали его для тестов — имитировали типовые сценарии: создавали прошивку, загружали её в контроллер, имитировали сигналы датчиков и проверяли выходные значения.

Наши решения

Создали удобный графический редактор

Мы разработали редактор — это позволило достичь максимальной производительности и полного контроля над низкоуровневыми операциями.

Редактор преобразует нарисованные схемы в код для контроллера. В нём есть:

  • входы — сигналы от оборудования (например, от датчика давления);
  • выходы — команды оборудованию (например, насосу в нефтепроводе).

Между входами и выходами можно настроить логику обработки: проанализировать входной сигнал и определить нужную команду на выход. Для этого мы создали библиотеку графических элементов с готовым кодом. Теперь вместо программирования достаточно собрать схему в редакторе:

В правой панели находится библиотека готовых блоков для создания схем, которые можно добавлять в нужное место перетаскиванием (drag-and-drop).

Блоки бывают двух типов:

  • Системные — предустановленные блоки, которые мы разработали вместе с заказчиком. Они покрывают большинство типовых задач.
  • Пользовательские — их можно создавать и настраивать под свои задачи через режим редактирования. В такие блоки можно добавить любой код.

Исходный код доступен для просмотра в любом блоке, но системные блоки нельзя менять.

Блоки обоих типов можно объединять в тематические библиотеки. Например, отдельная библиотека для управления насосами и отдельная — для запорной арматуры, которая автоматически перекрывает трубы при утечке.

Такой подход позволяет настраивать даже сложную логику и удобно управлять ею через собственные библиотеки — собирать прошивку из блоков можно как из кубиков LEGO.

 

Глубоко продумали удобство использования

Мы учли, что с редактором будут работать люди без технической подготовки, привыкшие только к графическим интерфейсам. Поэтому сделали интерфейс максимально понятным и добавили подсказки.

Редактор помогает создавать схемы без ошибок: отмечает проблемные места красным цветом и объясняет, как их исправить. Так пользователь сразу видит, что пошло не так и что нужно сделать.

В итоге формируется готовый код на языке C, из которого собирается рабочая прошивка для контроллера. Там, где раньше было не обойтись без C-разработчика c зарплатой от 160 000 руб., теперь справляется оператор без компетенций программиста.

Позаботились об опытных пользователях

Нашим инструментом пользуются и опытные программисты на C. Они могут создавать собственные блоки и настраивать библиотеки под задачи предприятия.

Для них мы добавили продвинутые возможности:

  1. Перед компиляцией схема преобразуется в код на C. Опытные разработчики могут отлаживать программу прямо в коде — иногда это удобнее, чем работать со схемой.
  2. Код организован понятно: отдельно глобальные и локальные переменные, константы и функции.
  3. Встроенный редактор кода с подсветкой синтаксиса позволяет работать с программой, не переключаясь в другие редакторы или IDE (Integrated Development Environment, интегрированная среда разработки).

После всех правок достаточно сделать один клик, и программа создаст готовую прошивку для контроллера.

Тщательно тестировали интерфейс

Интерфейс приложения получился нестандартным. В нём много компонентов:

  • библиотеки с группировкой блоков по пользовательским правилам и проектам;
  • формы для создания схем и их группировки в проекты;
  • система drag-and-drop для удобного создания схем;
  • правила соединения блоков.

Все эти функции нужны для удобной работы с большой системой. Но чем сложнее интерфейс, тем больше в нём может быть ошибок. Поэтому мы уделяем особое внимание тестированию.

Тестирование интерфейса заняло много времени. Мы проверяли:

  • Как пользователи создают схемы: перетаскивают блоки, соединяют их, группируют. Засекали время на типовые операции и спрашивали, что неудобно.
  • Работу с библиотеками: получится ли случайно удалить нужный блок? Как быстро можно найти нужный элемент? Помогает ли группировка?
  • Поведение редактора при ошибках: правильно ли подсвечиваются проблемные места? Понятны ли подсказки?
  • Крайние случаи: что будет, если добавить в схему сотню блоков? А если попытаться соединить несовместимые типы данных? Или создать циклическую зависимость?

Мы собрали группу инженеров-технологов — будущих пользователей системы. Они пробовали собрать типовые схемы: управление насосами, контроль давления, аварийные сценарии. Записывали их замечания и постепенно улучшали интерфейс.

Проверили и работу с кодом. Программисты на C пытались добавить свои блоки и библиотеки, отредактировать готовые схемы в режиме кода. Смотрели, хватает ли им встроенных инструментов или приходится переключаться в другие редакторы.

Результаты

  • Превратили сложное низкоуровневое программирование на C в понятный no-code конструктор. Такого решения ещё не было на рынке.
  • Упростили программирование контроллеров. Теперь настраивать их могут обычные операторы, а не только программисты. Вместо написания кода достаточно собрать схему из готовых блоков — редактор сам подскажет, как исправить ошибки, можно не бояться что-то сломать.
  • Сэкономили деньги заказчикам компании «Нефтепромавтоматика». Программистов на C теперь можно привлекать только для нестандартных задач, а не держать в штате постоянно. Не приходится подключать специалистов со стороны производителя при каждом изменении.
  • Помогли «Нефтепромавтоматике» масштабироваться. Наш клиент может продавать больше контроллеров — и теперь их проще настраивать. Высвободились ресурсы компании, так как заказчики компании справляются с управлением контроллерами сами. А ещё появился новый продукт и конкурентное преимущество — удобный софт для работы с контроллерами.