Простейшая система сбора данных на базе ADAM-4017

В последнее время актуальной становится проблема эффективного использования энергоресурсов. Кто-то подходит к ней со стороны выработки, а кто-то со стороны эффективного потребления энергии. Фирма, в которой я работаю, производит генерирующие мощности. Большая часть из них – тепловые электростанции, и лишь небольшая часть – нетрадиционные и возобновляемые источники энергии. Актуальность последних не вызывает сомнения, на то есть несколько стимулирующих факторов. Во-первых, подготовленная законодательная база в виде Федерального закона №261-ФЗ от 23.11.2009 «Об энергосбережении и о повышении энергетической эффективности и о внесении изменений в отдельные законодательные акты Российской Федерации», а именно статья 14 пункт 5, 7 и статья 34 пункт 5. Во-вторых, истощение невозобновляемых ресурсов (нефть, газ, уголь и пр.) приводит к повышению стоимости, как самих ресурсов, так и выработки с их помощью электроэнергии на тепловых электростанциях.

В России в промышленных масштабах освоена гидроэнергетика, суммарная установленная мощность которой измеряется гигаваттах. Развитие других возобновляемых источников энергии находится в зачаточном состоянии. Например, установленная мощность ветроэлектростанций (ВЭС) в РФ не превышает 100 МВт, в то время как суммарная мощность проектов ВЭС в РФ превышает 10 ГВт. Практически также обстоят дела с солнечной энергетикой, основным моментом сдерживающим развитие солнечных электростанций является низкий уровень инсоляции на большей части территории России.

Желание угнаться за современными технологиями, заставило директора предприятия, в котором я тружусь, купить фотоэлектрическую панель Centrosolar номинальной мощностью 215 Вт и установить её на фасаде офисного здания, со стороны, где солнце бывает лишь несколько часов в день. В качестве буферного элемента, позволяющего обеспечивать потребителя энергией в темное время суток, применен Li-Ion аккумулятор Thundersky-12-90 (12 Вольт, 90 А•ч). Трудится вся эта система под управлением контроллера Rich Electric SunStar SS-50C MPPT. Обошелся весь комплекс в 50 тысяч рублей, а учитывая, что вырабатываемой мощности хватает только на аварийное освещение 1 кабинета, данная установка практически не окупает себя в средней полосе РФ.

Чтобы новоиспеченную солнечную электростанцию можно было использовать хотя бы в образовательных целях, мне поручили разработать систему сбора данных, позволяющую непрерывно снимать вольтамперную характеристику на нагрузке (после контроллера заряда/разряда) и на фотоэлектрической панели. Учитывая скромный бюджет в 5000 рублей и нежелание что-либо паять, было решено реализовать затею на промышленных модулях. Денег на новое оборудование мне не хватило, поэтому пришлось обратиться к барахолке на Авито. Самое удивительное, что все «срослось». По грубой оценке мои затраты составили 4000 рублей, а весь профицит ушел в фонд оплаты труда. Вот список закупленного оборудования:

- 8-канальный модуль аналогового ввода ADAM-4017 – 1 шт. 1000 рублей + доставка из г. Тверь 500 рублей;
- 1-портовый асинхронный сервер RS-232/422/485 в Ethernet Moxa Nport DE-311 – 1 шт. 1000 рублей;
- модуль для измерения тока методом Холла на базе ACS712T ELC-20A – 2 шт. 300 рублей;
- 100 метров кабеля UTP-4 Cat 5e – 914 рублей.

Теперь обо всем по порядку. Самый сложный и интересный модуль с моей точки зрения – ADAM-4017. Его изучение начнем со вскрытия.


ADAM-4017 в сборе

ADAM-4017 вид на плату сверху

ADAM-4017 вид на плату снизу

Управляет всем процессом на плате восьмиразрядный однократно программируемый контроллер MC68HC705C8ACFN фирмы Motorola. Очень странный выбор, единственный его плюс – наличие 24-х двунаправленных портов ввода-вывода. ADAM-4017 общается с окружающим миром по 485 протоколу, отвечает за это малопотребляющий приемопередатчик ADM485JR. Аналоговая часть выполнена на 24-х битном дифференциальном АЦП AD7712AN, обладающим +-0,0015% нелинейности. Масштабирует входной сигнал аналоговый операционный усилитель AD620AN, а его арбитраж осуществляют два мультиплексора ADG508FBN.

Тот факт, что ADAM-4017 был у меня на руках, ещё ничего не значило. Для работы с ним необходимо было программное обеспечение. Фирма Advantech бесплатно поставляет лишь утилиту для настройки и демонстрации возможностей модуля, никакой речи о регистрации параметров и быть не может. Денег на Scada систему у меня не было, поэтому ПО было решено писать самостоятельно. В качестве среды для разработки была выбрана Delphi, как наиболее простая.

Процедура общения с ADAM-4017 предельно проста и состоит из нескольких этапов. Вначале мы открываем порт со скоростью, на которую настроен модуль, а затем посылаем управляющую команду (полный список команд можно посмотреть в документации). Каждый модуль Advantech, подключенный на шину RS-485, имеет свой адрес, поэтому в общем виде каждая команда состоит из управляющего символа, адреса, собственно самой команды. Рассмотрим часть из них:

$AAM(cr) – команда запрашивает имя у модуля аналогового ввода по адресу AA.
Синтаксис:
$ – символ разделитель;
AA – шестнадцатеричный адрес опрашиваемого модуля из диапазона 00-FF;
M – команда, считывающая имя модуля;
(cr) – символ завершения команды (возврат каретки 0х0D).
В случае успешного выполнения команды модуль вернет сообщение в формате !AA(Имя модуля)(cr). Если в запросе присутствует синтаксическая ошибка, указан не существующий адрес или обрыв линии связи, то модуль на команду не ответит.

$AAF(cr) – команда запрашивает у модуля аналогового ввода по адресу AA версию встроенного микропрограммного обеспечения.
Синтаксис:
$ – символ разделитель;
AA – шестнадцатеричный адрес опрашиваемого модуля из диапазона 00-FF;
F – команда, считывающая версию встроенного микропрограммного обеспечения;
(cr) – символ завершения команды (возврат каретки 0х0D).
В случае успешного выполнения команды модуль вернет сообщение в формате !AA(Версия)(cr). Если в запросе присутствует синтаксическая ошибка, указан не существующий адрес или обрыв линии связи, то модуль на команду не ответит.

#AA(cr) – команда выводит значение всех аналоговых каналов.
Синтаксис:
# – символ разделитель;
AA – шестнадцатеричный адрес опрашиваемого модуля из диапазона 00-FF;
(cr) – символ завершения команды (возврат каретки 0х0D).
В случае успешного выполнения команды модуль вернет сообщение в формате >(данные)(cr). Пример ответа при успешном выполнении запроса: >+1.0005+2.0005+3.0005+4.0005+5.0005+6.0005+7.0005+8.0005(cr).

Описанные выше три команды практически полностью перекрывают штатный функционал ADAM-4017. Например, чтобы найти модуль на шине, достаточно пробежаться командой $AAM по всему диапазону адресов от 00 до FF, а для получения информации о напряжении на всех каналах достаточно послать запрос #AA. Но бывают ситуации, когда нет возможности определить адрес и скорость передачи данных, специально с этой целью модуль снабжен режимом инициализации. Для входа в него необходимо при включении перемкнуть контакты GND и INIT*.


Активация режима инициализации у ADAM-4017

Чем же замечателен этот режим? Все очень просто, в нем модуль имеет адрес 0x00, скорость передачи 9600 бит/сек и возможность расширенной настройки с помощью специальной команды, имеющей формат %AANNTTCCFF(cr), где:
% – символ разделитель;
AA – шестнадцатеричный адрес опрашиваемого модуля из диапазона 00-FF;
NN – новый адрес модуля, который необходимо установить (из диапазона 00-FF);
TT – определяет тип входного сигнала;
Код сигнала (HEX)Диапазон входного сигнала
08±10 В
09±5 В
0A±1 В
0B±500 мВ
0C±150 мВ
0D±20 мА
СС – определяет скорость передачи данных;
Код передачи данных (HEX)Скорость,кбит/сек
031.2
042.4
054.8
069.6
0719.2
0838.4
0957.6
0A115.2
FF – 8-битный параметр, отвечающий за формат вывода данных, контрольную сумму и время усреднения;

Расшифровка бита FF
(cr) – символ завершения команды (возврат каретки 0х0D).
В случае успешного выполнения команды, модуль вернет сообщение в формате !AA(cr), в случае синтаксической ошибки – ?AA(cr), во всех остальных случаях модуль никак не ответит на посланный запрос.

Теперь можно перейти к изучению разработанной мной программы, найти её сможете в архиве adam4017_test.zip (MD5: D6E720CC065792F48507870A3248570C). Если у Вас есть желание получить исходные коды, прошу обращаться ко мне на почту. Решение будет принято индивидуально по каждому конкретному случаю. Разработанное ПО позволяет: получать данные со всех каналов ADAM-4017, выполнять математические операции над ними, вести архивы в формате CVS, Microsoft Excel, Microsoft Access и производить конфигурацию модуля.


Главное окно программы для тестирования ADAM

В главном окне можно выделить несколько рабочих зон. Кнопка «Старт/стоп» (поз. 1), управляющая процессом мониторинга, кнопка «О программе» (поз. 2), выводящая информацию об авторе и программе, а также кнопка «Выход» (поз. 3). Помимо этого следует отметить наличие области для отображения показаний (поз. 4) и главного меню (поз. 5).


Перед началом работы необходимо выбрать порт и скорость передачи данных. Делается эта настройка с помощью диалогового окна «Настройка com-порта» (Главное меню->Настройка->COM-порта компьютера). Верный набор параметров необходимо подтвердить нажатием на кнопку «Применить». Если Вы запускаете ADAM в первый раз, то рекомендую сделать это в режиме инициализации, а, следовательно, установив скорость порта в 9600 бит/сек.


Чтобы программа смогла корректно работать с модулем, следующим этапом пользователь должен определить его адрес, выполнив команду «Найти ADAM» из раздела «Утилиты» главного меню. В появившемся окне указываем диапазон для поиска и нажимаем на соответствующую кнопку. Процесс автоматически прервется, если ADAM-4017 откликнется на посланную команду, а чтобы экстренно его остановить, нужно нажать на «Стоп».


Изменить настройки каждого канала позволяет окно «Настройка измерительных каналов» (Главное меню->Настройка->Измерительных каналов). В соответствующих полях Вы можете активировать канал, указать необходимость сохранения значений в базу данных, определить единицу и точность измерения. Масштабировать значение, полученное от модуля, можно с помощью поля «Формула», придерживаясь некоторых простых правил. Сигнал обозначается символом х. Оперировать с ним можно при помощи простейших математических операций, таких как: сложение (+), вычитание (-), умножение (*), деление (/), возведение в степень (^), а также тригонометрических функции (sin, cos, tan, ctg). Например, если мы хотим, чтобы значение сигнала перед выводом пользователю умножалось на 2, то должны указать формулу 2*x.

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


Аппаратные настройки ADAM-4017, задаваемые с помощью команды %AANNTTCCFF(cr), позволяет редактировать диалоговое окно «Настройки ADAM» (Главное меню->Настройка->Преобразователя ADAM). Обращаю Ваше внимание, что часть настроек можно изменить только тогда, когда модуль находится в режиме инициализации. Advantech рекомендует при выполнении этой команды подождать около 15 секунд, чтобы аналоговая часть системы успела подстроиться под новые условия работы. Все настройки программа сохраняет в файле settings.ini, который автоматически создается при первом запуске.

Для того чтобы работать с модулем на обычном компьютере необходимо приобрести либо разработать плату, позволяющую общаться c ним по протоколу RS-485. Первое, что я решил сделать – приобрести переходник USB->RS-485, т.к. стоимость последних в Китайских интернет-магазинах колеблется в диапазоне от 2.5 до 5 долларов. К сожалению, быстро достать его я не смог, поэтому было решено купить более «забавную» игрушку - Moxa Nport DE-311. Причиной покупки стало внезапно попавшееся объявление на Avito, и Вы знаете, нисколько об этом не пожалел.


MOXA NPort DE-311 в сборе

MOXA NPort DE-311 вид на плату сверху

MOXA NPort DE-311 вид на плату снизу

Совсем забыл сказать, что MOXA – преобразователь интерфейсов из RS-232/422/485 в Ethernet. Со стороны производителя реализована его поддержка большинством популярных операционных систем. Мы же будем рассматривать настройку преобразователя в ОС семейства Windows с помощью утилит NPort Search Utility и NPort Windows Driver Manager.

Перед началом работы с Nport DE-311 его необходимо сбросить, несколько секунд удерживая кнопку RESET, а после этого обновить прошивку на актуальную и сконфигурировать. Сделать такие манипуляции позволит NPort Search Utility.


Для обновления прошивки в главном окне программы нажимаем на кнопку «Search». Если преобразователь интерфейсов исправен, то спустя несколько секунд список заполниться устройствами Moxa, находящимися в одной сети с компьютером. На случай если автоматический поиск не сработал, предусмотрена возможность ручной установки IP-адреса кнопкой «Search IP».


При успешном выполнении предыдущих пунктов, будут активированы дополнительные кнопки. Нажимая на «Upgrade», Вы попадете в диалоговое окно загрузки прошивки, где необходимо будет указать путь до необходимого файла Firmware. Свой выбор необходимо подтвердить нажатием на кнопку «ОК», но помните, что обратного пути при этом не будет.


Нажимая на «Assign IP» у Вас появляется возможность изменить сетевые настройки преобразователя: можно либо привязать модулю определенный IP, либо назначать его по DHCP. На этом считаю предварительную настройку завершенной.

Работа с Moxa Nport DE-311 в среде Windows происходит через виртуальный COM порт. Программа, отвечающая за установку драйверов и настройку порта, называется NPort Windows Driver Manager.


Чтобы добавить новый виртуальный порт требуется в главном окне нажать на кнопку «Add».


В появившемся диалоге нажимаем на кнопку «Search», ждем 5-10 секунд, нажимаем на кнопку «ОК», а затем на вопрос «Do you want to activate COM Port now?» отвечаем согласием. Теперь преобразователь полностью настроен и готов к работе. Номер порта, который необходимо использовать в программе, описанной несколько абзацев ранее, указан в главном окне NPort Windows Driver Manager.

Оборудование настроено, но осталась одна нерешенная проблема. Модуль ADAM-4017 не умеет измерять большие токи. Основной входной параметр для него – напряжение. В качестве преобразователя ток/напряжения возможно применение шунта либо датчика, использующего при работе принцип Холла. С шунтом у меня как-то не сложилось с самого начала, поэтому выбор пал на плату с чипом ACS712ELC-20A.


Модуль позволяет измерять силу постоянного тока до 20А в обоих направлениях. Изменение тока на 1А приводит к изменению выходного напряжения на 100 мВ. Напряжение питания модуля 5В, при отсутствии тока через него – выходное напряжение составляет 2.5 В.

Итак, система собрана и работает, остается только анализировать полученные данные, но это уже другая история.

В заключении хочется сказать, что весь материал предназначен лишь для ознакомления. Полное либо частичное воспроизведение материалов материалоа возможна только с моего разрешения и с соблюдением ссылок на первоисточник. Желающих поддержать не только словом, но и делом, а также поблагодарить – прошу ко мне на почту.

Материалы к статье:
1. NPort Search Utility - скачать;
2. NPort Windows Driver Manager - скачать;
3. Прошивка для MOXA Nport DE-311 - скачать;
4. Программа для работы с ADAM-4017 - скачать;
5. Техническое описание на преобразователи ADAM серии 4000 - скачать;