Как мы разрабатывали клиент-серверное приложение для управления освещением по modbus

iOS приложение для управление садом

Мне всегда было интересно делать разные нестандартные вещи на стыке технологий. Электроника и программирование, промышленные приборы и ПК. Например, взять какой-нибудь промышленный электронный измеритель с последовательным портом и написать для него драйвер и клиентскую программу. Естественно, начав изучать Java, сразу захотелось применить эти знания на практике.

Объединив усилия с другом, и написав нескольких простеньких проектов, задумались: как бы нам соединить наш опыт в АСУ ТП и Java и сделать что-нибудь полезное.

Тут всплыла давнишняя мечта об умном доме. Взяли и накидали такую схему:

С ПЛК (программируемый логический контроллер) все было понятно, подойдет любой недорогой промышленный контроллер, у которого есть протокол modbus и интерфейс ethernet. А вот с клиентскими приложениями возникла проблема. Если для android платформы modbus мы прикрутили быстро, то для iOS оказалось не все так просто. Отсутствие готовых библиотек, и самое главное, опыта разработки под iOS показало, что необходимо ввести промежуточное звено в виде сервера. И название ему придумали - UNO Server (Universal Not Opc Server).

Получилась такая схема:

Для UNO Server поставили минимальный набор требований:

   1. возможность работать по modbus с любым ПЛК.
   2. возможность подключатся к любому количеству ПЛК.
   3. возможность отдавать информацию любому устройству, реализующему наш протокол через интерфейс ethernet.

Решили, что клиенты будут подключаться к серверу через порты (тогда мы еще не знали про JEE и REST сервисы). Протокол обмена реализовали простейший: простая передача информации в виде XML.

По мере изучения Java, сервер был подвергнут ряду рефакторингов (мы узнали про интерфейсы, паттерны и т.д.)

В итоге пришли к такой схеме:

Полевые испытания.

В качестве ПЛК купили ОВЕН – 150 (еще проверяли на GE-IP PAC Systems Rx7i):

   • DI – 8 шт.
   • DO – 4 шт.
   • AI – 4 шт.
   • AO – 2 шт.
   • Наличие Ethernet и RS-485.

При проведении испытаний в качестве сервера использовали raspberry pi. Пришлось выкинуть из UNO Server графическую часть (хорошо, что мы использовали паттерн MVC). Роутер настроили на статический IP адрес (появилась возможность подключаться к UNO Server через интернет.

Что мы в итоге имеем:

   1. Сервер умеет работать с несколькими ПЛК по протоколу modbus через wifi или RS-485(232).
   2. Имеется возможность конфигурации ПЛК через XML файл, по одному файлу на каждый ПЛК.
   3. Разработано три приложения: для iOS, android и межплатформенное десктопное.

Какие планы:

   1. Так как со статическим IP адресом много проблем, то необходимо реализовать сервис в интернете (например Google AppEngine) для сбора статистики, показаний датчиков и управления.
   2. Доработать мобильные приложения. Чтобы не разрабатывать приложения для каждого нового проекта, необходимо разделить его на две части: изменяемая и неизменяемая. Неизменяемая часть будет представлять из себя приложение с возможностью подгрузки ресурсов в виде картинок и файлов конфигурации.
   3. Загрузка конфигурации UNO Server по сети. Для этого необходим конфигуратор. Он же будет и десктопным клиентом.
   4. Использовать вместо портов REST сервисы и HTTP протокол.

Наверх