Промышленные контроллеры

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

Внешний вид контроллера:

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

Контроллеры построены на различных микроконтроллерах или процессорах. Базовые контроллеры используют STM32F107 или STM32F407.

Контроллер без платы оперативного управления:

Контроллер имеет единую процессорную плату с размещенными на ней модулями: стабилизатор питания, микроконтроллер, блок Ethernet (на LAN8710A/LAN8720A), массив памяти на Data Flash микросхемах, базовый интерфейс RS485, переходные разъемы для нижней интерфейсной платы и верхней платы оперативного управления с ЖКИ индикатором и кнопками. Плата оперативного управления не обязательна и использовалась только в некоторых случаях.

Нижние интерфейсные платы существуют в нескольких вариантах и рассчитаны для разных областей применения, имеют различные блоки питания:
1) 4 интерфейса RS485 + 12 логических входов + 5 аналоговых входов + 5 транзисторных ключей.
2) 10 логических входов + 5 аналоговых входов + 8 реле + 3 транзисторных ключа + GSM модем
3) 10 логических входов + 5 аналоговых входов + 10 транзисторных ключей
4) 2 специализированных токовых линий связи с оптронной развязкой + 8 транзисторных ключей и другие.

Аналоговые входы могут работать в режиме 4-20mA (с внешним питанием датчика или паразитным питанием). А также в режиме измерения напряжения 0-24В или цифровом режиме, подразумевающим подключение датчиков типа DS1820 / DS18B20 / DHT22 / AM2302 и т.п. Смена режима работы производится «джампером» на интерфейсной плате или программно. Логические входы представляют собой входы оптронов с подключением к внутреннему источнику питания и установленным балластным резистором. Такие входы рассчитаны на замыкание на общую шину внешним «сухим контактом». Это позволяет применять различные концевые переключатели, выполняя монтаж одним проводом при наличии общей шины (заземлении) на неком токопроводящем каркасе или корпусе. Также удобно при применении поплавковых датчиков уровня жидкости.

Также существуют одно-платные контроллеры, выполняющие вспомогательные функции.

Одно-платный контроллер освещения с силовыми реле:


Одноплатный контроллер с поддержкой специализированной многопроводной токовой линии связи:

Такие контроллеры построены на микросхемах Microchip различных семейств.

Все контроллеры не являются универсальными промышленными контроллерами (ПЛК) в прямом смысле, поскольку не используют стандартный набор языков программирования стандарта IEC61131-3:
LD (Ladder Diagram)
FBD (Function Block Diagram)
SFC (Sequential Function Chart)
Хотя некоторые контроллеры снабжены интерпретатором, поддерживающим LD и FBD языки. Но это не основное их назначение и не основной метод их использования.

Программно контроллеры построены на моей собственной платформе (фреймворк), различные части и модули которой я делал в разные годы для различных проектов.
Данный фреймворк не использует каких либо готовых библиотек и модулей каких либо конкретных производителей. Таких как Cube от STMicroelectronics или подобных. Все написано с нуля, в основном на Plain C, C++.

Процессорная плата с блоком оперативного управления:

Программная поддержка основных процессорных плат на STM32F107 включает в себя:

A) Бутлоадер. Он позволяет производить первоначальную загрузку конечного программного обеспечения. Участвует в процессе обновления ПО с помощью WEB интерфейса контроллера. Первоначальная загрузка (новый контроллер, критичная ошибка в рабочем ПО) возможна через базовый интерфейс RS-485. Осуществляется из утилиты управления сетью контроллеров:

Утилита прошивки и управления:

Процесс обновления ПО через WEB интерфейс подразумевает несколько этапов проверок, исключающих ошибки и недоразумения:
1) Каждый контроллер имеет ID аппаратного обеспечения процессорной платы и ID аппаратного обеспечения используемой платы периферии.
2) Файл прошивки подготавливается разработчиком в специальной утилите и включает в себя оба ID, CRC32 самого файла прошивки, CRC32 прошивки, уже размещенной в программной памяти контроллера/процессора с учетом архитектуры построения самой программной памяти, «фантомных» байтов и других особенностей используемого однокристального контроллера/процессора.
3) Пользователь получает файл прошивки, включающий какие либо исправления в алгоритм работы и т.п.
4) Через WEB интерфейс файл по протоколу http передается в процессорную плату

Обновление прошивки:

5) Основное текущее ПО контроллера проверят CRC32 полученного файла и соответствие ID аппаратного обеспечения процессорной платы и ID аппаратного обеспечения платы периферии. Такие проверки на этапе получения файла позволяют избежать грубых ошибок (файл не для того контроллера) без опасности стирания рабочего (текущего) ПО контроллера и без лишних перезагрузок контроллера.
6) При успешном прохождении проверок файл обновления записывается в специальную область внутреннего хранилища данных. Эта область не используется для размещения виртуального диска FAT32.
7) Далее происходит сброс контроллера и передача управления бутлоадеру. Бутлоадер проводит повторную проверку CRC32 файла и проверки обоих аппаратных ID.Такая повторная проверка исключает затирание рабочего ПО в случае некорректной проверки неким «сбойным» рабочим ПО. Такие ситуации редки, но случаются на этапе разработки новых проектов. Проверка ID аппаратного обеспечения платы периферии исключает опасность повреждений системы в случае некорректного управления со стороны рабочего ПО «не той» периферией.
8) В случае успешной повторной проверки файл пришивается бутлоадером в программную память микроконтроллера/процессора.
9) Далее бутлоадер проводит сравнение CRC32 реальной программной памяти и CRC32, хранящегося в файле прошивки. В случае успешной проверки, управление передается новому рабочему ПО. Такая проверка CRC32 программной памяти проводится бутлоадером при каждом старте контроллера. Поскольку при старте управление получает именно бутлоадер. Это исключает ошибки, связанные с повреждением или износом программной памяти. В случае, если бутлоадер обнаружил несоответствие CRC32 программной памяти, то управление остается в бутлоадере и возможна прошивка по базовому интерфейсу RS-485.

B) Основная часть ПО (Фреймворк) поддерживает:

1) Пакетный обмен данными по таким интерфейсам, как RS232/RS485. Данный формат включает в себя адресацию, маршрутизацию пакетов (для контроллеров с 2-мя и более модулями RS485), взаимодействие с утилитой управления системой (приложение Win32).
2) Поддержку стека протоколов TCP/IP по шине Ethernet 100.
3) Http сервер. Данная реализация поддерживает несколько подходов(технологий), позволяющих реализовать WEB интерфейсы, активно взаимодействующие с переменными/входами/выходами/строками/таблицами в памяти контроллера. Это и динамическая верстка html текстов с использованием имен переменных (динамическая вставка), а также обмен XML файлами. В сочетании с использованием технологий DOM (Javascript) и SVG на страницах это позволяет создавать интерфейсы практически неограниченной сложности. При этом данные интерфейсы одинаково успешно работают на различных устройствах (ПК, смартфоны, планшеты) во всех современных браузерах. Данный сервер поддерживает http авторизацию для любых выбранных страниц, что позволяет отделить общедоступную часть интерфейса от страниц настроек и установок

Несколько примеров интерфейсов:

Интерфейс контроллера гидропоники:

Данный проект примечателен тем, что широко использует технологию SVG+DOM для отрисовки мнемосхемы установки и ее анимации:

Интерфейс контроллера передвижной электростанции:

Страница сетевых и системных настроек:

Страница ввода параметров:

4) Внутренняя память / FAT32 диск.
Реализована поддержка FAT16/FAT32. При этом поддерживаются каталоги любой глубины вложенности. Стандартная система выдачи дескрипторов файлов и дескрипторов пользователей. При этом различные пользователи библиотеки FAT16/FAT32 могут находиться в различных текущих каталогах. Имеющаяся на процессорной плате память Data Flash разделена на 3 основных области:
— область бутлоадера (хранение файлов обновлений)
— область системы ведения логов событий
— область форматирования под виртуальный диск пользователя.

Разделение памяти по размеру может быть произведено в любых пропорциях. Область, отведенная под виртуальный диск, форматируется как FAT32. FAT32 выбран потому, что позволяет минимизировать расход памяти на хранение вспомогательной информации при малых размерах диска. Размер внутренней памяти контроллера колеблется от 12МБ до 32МБ в зависимости от количества и типа установленных микросхем.

Часть памяти может быть отведена под хоранение лога событий. Формирование записи о событии сводится к вызову одной функции с передачей текстовой части события и до 3-х числовых параметров. Событие фиксируется в журнале с указанием даты и времени события, а также с расшифровкой переденных числовых параметров. Лог в дальнейшем доступен через WEB интерфейс для просмотра и может быть скачан в виде XML или текстового файла. Формат лога (XML/TXT) выбирается изначально. Для хранения одной записи лога используется до 100 байт. Т.е. при выделении для области лога 500 кБ емкость лога составит 5000 записей. Для использования лог событий доступен по имени переменной и может быть применен в различных вариантах. В составе объекта со стилем и параметром overflow: auto; (как на скриншитах), так и в составе простого текста на html странице или в заготовке для скачивания в виде файла. Чтение и подстановка текста лога производится http сервером автоматически при динамической компоновке выдаваемой информации браузеру.

Лог событий в XML формате:

Лог событий в текстовом формате:

5) Внутренняя память после форматирования (на странице системных настроек) доступна по протоколу FTP. Данная реализация FTP включает в себя поддержку не всех существующих команд данного протокола. Но успешно работает со всеми популярными FTP клиентами. Я предпочитаю Total Commander и состав реализованных команд создавался именно для работы с этим файловым менеджером. При этом поддерживается настраиваемое количество одновременных соединений FTP. Для каждого соединения поддерживается раздельная аутентификация пользователя. Каждый пользователь работает со своим текущим каталогом и никак не связан с работой других пользователей. Данный FTP доступ — основной метод для записи в память необходимой информации.
6) Информация (файлы) внутренней памяти может быть использована в работе WEB интерфейса И доступна из WEB сервера. Или может быть использована в любых иных целях при реализации проекта.
7) Реализован NBNS сервер (NetBIOS Name) Это позволяет получить удобный доступ к WEB интерфейсу контроллера по его текстовому имени в локальных сетях на основе Win машин без организации DNS сервера в локальной сети.
8) Поддержка пользовательского меню на основе ЖКИ индикатора (TIC-120J) и клавиш управления. При этом организация меню подразумевает только заполнение таблиц наименований пунктов меню и привязка переменных для редактирования. Вся работа с аппаратным обеспечением платы оперативного управления контроллера скрыта.
9) Поддержка RTC на основе аппаратного модуля соответствующих SMS контроллеров (F107 или F407). При этом поддерживается юлианский календарь с учетом високосных лет. Для пользователя дата/время доступны как структура с представлением текущих значений в BCD, бинарном(числовом) и текстовом формате.
10) Возможно использование вариантов фреймворка без использования RTOS операционных систем, также существует аналогичный вариант
с интегрированной TNKernel или TNeo.
11) Использование GSM модема при установке соответствующей интерфейсной платы не ограничевается только отправкой/приемом SMS. Существует вариант организации доступа к WEB интерфейсу контроллера при использовании стандартного договора с сотовым оператором (динамический «серый» IP адрес). При этом фреймворк поддерживает открытым TCP соединение с сервером (ПО сервера существует только для Win хостинга) с указанным в сетевых настройках IP адресом или доменным именем. Пользователь может получить доступ к контроллеру, найдя его по уникальному имени в перечне подключенных к серверу устройств. Такой вариант устойчив, но требует поддержания сервера.
В данный момент проектов, для которых имеет смысл такой подход, нет и сервер выключен. Также существует вариант организации доступа к WEB интерфейсу при использовании услуги сотового оператора «динамический «белый» IP адрес». При этом пользователь может послать запрос на заранее известный номер SIM карты контроллера и получит в ответ SMS, содержащую ссылку на текущий IP адрес GSM модема. Но такой вариант не всегда работает стабильно. При приеме/оправке SMS во время активного сенса передачи данных
иногда происходит смена такущего IP адреса. Вероятно это связано с особенностями прошивок самих GSM модемов или особенностями работы ПО оборудования сотовых операторов. Такой вариант не подразумевает использования какого либо промежуточного сервера для связи Контроллер <-> Браузер пользователя и потенциально перспективен.

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

Примеры использования контроллеров:
Управление освещением
Система вентиляции
Водоотлив
Grow Box (гидропоника)