Меркурий 230 подключение к компьютеру

Обновлено: 06.07.2024

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

Опрос счетчиков производится из приложения установленного на смартфоне, при этом связь осуществляется через Bluetooth.

Плата преобразователя.

Плата преобразователя представляет собой набор модулей:

Iskra Mini — полноценная Arduino-платформа с установленным микроконтроллером ATmega328.
Плата расширения — Bluetooth-модуль HC-05.
Плата расширения — Приёмопередатчик RS-485.
— Аккумуляторный элемент питания 9В типа «Крона» (сразу оговорюсь неудачный вариант, лучше использовать аккумулятор для подзарядки телефонов)
— Кнопка включения.
— USB разъем для подачи питания 5В.
— Разъем RJ11 для подключения линии RS485.

Все элементы располагаются на отдельной материнской плате, помещенной в пластмассовом корпусе. При включении преобразователя Bluetooth-модуль HC-05 переходит в режим работы
«прозрачного UART» и ожидает подключения со стороны смартфона.

image

Схема соединений.

При включении переключателя SW1 напряжение питания 9-12 Вольт подается на электронный
регулятор LM7805 (желательно заменить на иную модель).

С выхода регулятора пониженное напряжение 5 Вольт подается на pin «+5V» Iskra Mini, pin «V» Bluetooth модуля и pin «V» модуля RS485. Отрицательный провод аккумулятора подключается к выводам GND всех модулей. При подаче напряжения питания 5 Вольт через разъем microUSB, все модули запитываются аналогично, минуя регулятор LM7805.

J1 и J2 являются перемычками и должны быть замкнуты в рабочем режиме.
J3 – шести контактный разъем, предназначенный для «прошивки» модуля Iskra Mini с помощью
USB-Serial адаптера.

При загрузке ПО в модуль Iskra Mini, перемычки J1 и J2 должны быть разомкнуты. Конденсатор С1 предназначен для осуществления сброса микроконтроллера в момент выполнения загрузки ПО.

image

Программное обеспечение преобразователя.

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

Connect_OK – устройство с указанным сетевым адресом обнаружено в сети.
Connect_FAIL – устройства с этим сетевым адресом не отвечает.
Access_OK – пароль доступа передан, ответ получен.
Access_FAIL – доступ закрыт, пароль не принят.

Алгоритм работы ПО микроконтроллера.

После получения команды init или loop отправляется байтовая последовательность
Net Address, 0x00, 0x00, CRC 1, CRC 2.

В случае нахождения устройства в сети будет аналогичный ответ, после чего сравниваются сетевые адреса — отправленный и полученный.

Проверки CRC в ответном массиве на настоящий момент не производится.
При положительном сравнении в модуль Bluetooth отправляется строка Connect_OK, в противном случае Connect_FAIL.

Далее отправляется запрос доступа с передачей пароля Net Address, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, CRC 1, CRC.

При получении ответа, аналогичного в запросе на обнаружение устройства, в модуль Bluetooth отправляется строка Access_OK, в противном случае Access_FAIL.

После установления связи начинается передача запросов для получения данных согласно
протоколу.


Ссылаясь на рекомендации производителя, особое внимание следует уделять величине timeout между запросом и ответом, поскольку преобразователь всегда является устройством Master, а опрашиваемые устройства -Slave.

Программное обеспечение смартфона.

После установки Android приложения, в смартфоне в меню приложений необходимо найти
ярлык с названием «М-230» и запустить программу.

В открывшемся приложении нажать на выпадающее меню рядом с надписью «Команды»
после чего появится список команд.

image


Поиск устройств – будет произведен поиск доступных Bluetooth устройств и предложено
подключиться.

Проверить связь – команда проверки связи с преобразователем.

Опросить – однократный опрос счетчика по указанному сетевому адресу.

Монитор – постоянный циклический опрос одного устройства по указанному сетевому адресу (online режим).

Остановить – остановка циклического опроса.

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

Сегодня рассмотрим многообразие схем подключений интерфейсов счетчиков, по возможности с фотографиями и картинками. Начнем с того, что в счетчиках Меркурий бывают всего два вида проводных интерфейсов RS485 (промышленный стандарт) и CAN (немного забытый интерфейс, среди производителей счетчиков есть только у Меркуриев), у них всего два сигнальных провода А и В, но клеммники и подписи счетчиках расположены по разному. Вообще если будете стоять перед выбором счетчика с проводным интерфейсом, то советую лучше использовать счетчики с RS485 - это надежней и универсальней.



Меркурий-200.
Этот счетчик делается только с CAN интерфейсом, причем питание интерфейса здесь только внешнее. Подключаться только так как на схеме!

Подключение CAN:
1 - (GND)
2 - (A)
3 - (B)
4 - (+5V)


Чтобы начать работать по интерфейсу с этим счетчиком надо его включить, т.е. обязательно надо подать 220(В) на силовые клеммы счетчика.


В конфигураторе вписываем сетевой адрес (для Меркурий-200 он равен 6 последним цифрам серийного номера, если посмотрите на картинку, то в моем случае это 238249), галочка Эхо должна быть снята и жмем "Соединить".



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

Наличие встроенного питания проводного интерфейса связи обозначается буквой S, например Меркурий-230 ART-02 PQR S IN. Если данная буква присутствует, то для подключения к счетчику достаточно будет двух сигнальных проводов А и В, а если ее нет, то необходимо подключать еще внешнее питание интерфейса как на картинке.

Встроенный интерфейс CAN обозначается буквой C:
- например Меркурий-230 ART-00 C N или Меркурий-230 ART-01 C LN

Подключение CAN:
23 - (+5V)
24 - (B)
18 - (GND)
19 - (A)




У трехфазных счетчиков сетевой адрес обычно равен трем последним цифрам серийного номера, но если число будет больше 240, то двум цифрам. В нашем случае счетчик имеет серийный номер 17654267, значит сетевой адрес равен 67 (но даже если вы его не знаете, то можно при индивидуальном подключении обратиться к этому счетчику по адресу 0. Если же на одном интерфейсе сидит группа счетчиков по нулевому адресу обращаться нельзя, они тогда все попытаются ответить и посылка будет сбойной).

Пароль с завода у User - 111111, для Admin - 222222, галочка Hex установлена.




Встроенный промышленный RS485 интерфейс обозначается буквой R:
- например Меркурий -230 ART-02 R N или Меркурий-230 ART-02 PQ R SIN

Подключение RS485:

Для этой модификации счетчика внешнее питание не обязательно подавать, т.к. оно там есть, но я нарисовал его специально, чтобы рассказать маленькую хитрость. Если на счетчик не подать 220-380 Вольт, то обычно с ним работать нельзя, но если подать на такой счетчик (с буквой S) внешнее питание интерфейса, даже не подавая высокое напряжение, то он станет доступен из конфигуратора.

Серийный номер равен 06239697, берем последние 3 цифры - это 697, число больше 240, значит его сетевой адрес равен двум последним цифрам серийного номера, т.е. 97.

Пароль с завода у User - 111111, для Admin - 222222, галочка Hex установлена.



Меркурий-206.
Современный однофазный счетчик пришедший на смену Меркурий-200. Единственно, что неоднократно озвучивалось руководству - нет нормальных кнопок (функции оптической кнопки оптопорта работают, но на мой взгляд это от лукавого средство) и подсветки ЖК дисплея. Удешевление не должно ухудшать эргономику работы со счетчиком. Во всем остальном счетчик содержит максимум возможных функций, особенно те модификации которые могут хранить профиль мощности, параметры контроля электроэнергии и встроенное реле, актуальные параметры при автоматизации.

Из производства на данный момент выходят счетчики только с RS485 интерфейсом, он обозначается буквой R, например Меркурий-206 PRNO. Встроенное питание интерфейса обозначается буквой S, обычно его нет.

Подключение RS485:
7 - (+5V)
8 - (A)
9 - (B)
10- (GND)


Для работы через проводные интерфейсы обязательно подключение счетчика с силовой сети 220(В).

У Меркурий-206 сетевой адрес с завода равен серийному номеру, поэтому по нашему фото сетевой адрес будет 18049831.



Меркурий-233.
Счетчик снятый с производства, но достаточно много выпускающийся в свое время, в котором можно было устанавливать дополнительные интерфейсные модули. Например по одному интерфейсу RS485 подключен GSM-модем и по нему опрашивает счетчик энергосбыт, а по второму RS485 владелец счетчика может получать данные в автоматизированную систему учета данных. Также на борту всегда присутствует оптопорт и можно получать например профили мощности без вскрытия клеммной коробки.

У счетчиков Меркурий-233 может быть до двух модулей RS485, но как минимум один из них всегда есть, питание интерфейса в обоих случаях встроенное, так что подключать RS485 интерфейс нужно двумя проводами А и В как на рисунке.

Подключение первого RS485:
19 - (A)
17 - (B)


Подключение второго RS485 (на картинке внизу его по факту нет, но клеммник стоит и я поэтому решил показать где он подключается при наличии):
27 - (A)
25 - (B)


Как мы видим, серийный номер у этого трехфазного счетчика равен 05348592, значит т.к. последние три цифры больше 240, то сетевой адрес равен 92.


Меркурий-234.
Счетчик вышедший взамен Меркурий-233, обладает большим количеством модификаций и является одним из самых современных трехфазных счетчиков. В нем всегда есть один проводной RS485 и может добавляться второй в виде встроенного модуля.

Если запутаетесь, то подключаться нужно к клемме XT4 так:
14 - (A) Data+
15 - (B) Data-



Data+ соответсвует клемме А преобразователя интерфейсов USB-RS485/CAN (модель VR-002), а Data- соответствует клемме В.

Как уже писал, в этом счетчике бывает еще дополнительны модуль со вторым RS485 (буква R в абревиатуре, например Меркурий-234 ART-03 PB.R), который можно использовать для технического учета или для передачи показаний в энергосбыт. Подключать его нужно к клемме XS1 как на нижестоящем рисунке:


У счетчика на фото серийный номер 15576414, последние три цифры 414, т.е. больше 240, значит сетевой адрес будет равен последним двум цифрам - 14. Запускаем конфигуратор.



Меркурий-236.
DIN-реечный малогабаритный электросчетчк с большим функционалом, профилями мощности, слежением за параметрами электроэнергии. Подходит для автоматизации, может содержать проводной RS485, оптопорт, PLC-1 и реле. На мой взгляд лучшая замена Меркурий-231.


Подключение первого RS485:
15 - (A)
16 - (B)


Меркурий-203.2T.
В отличии от Меркурий-200 он содержит журнал событий, профиль мощности и реле. Также в нем есть проводной RS485 интерфейс, не требующий внешнего питания и подсветку дисплея.

Подключение первого RS485:
7 - (A) Data+
6 - (B) Data-


У Меркурий-203.2Т сетевой адрес равен серийному номеру счетчика, поэтому в нашем случае это будет 08258331.


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

Начало

На предприятии нужно было автоматизировать сбор показаний с электросчетчиков, порядка двадцати штук. Сделать это требовалось быстро и максимально дешево. Поэтому приняли решение собирать данные с помощью уже развернутого Zabbix, а вот для подключения к счетчику потребовалось написать небольшой скрипт, об этом ниже. Так вышло, что сбор показаний, это лишь один из параметров, который нужно собирать, за остальные отвечает ПК с Debian на борту, поэтому не было сложности подключиться к счетчику через COM-порт. Конечно, для большинства, будет удобнее использовать локальную сеть и получить информацию с промышленного коммутатора или конвертера интерфейсов.

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


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


Решение задачи

Счетчик, принимает на вход строку байтов формата ADDR-CMD-CRC, а отдает ADDR-CMD-DATA-CRC, где:

  • ADDR — Имя счетчика (для меркурий 203.2Т — совпадает с серийным номером)
  • CMD — Код команда
  • DATA — Данные, зависят от запроса
  • CRC — 2х байтовый циклический избыточный код, вычисляемый по всем предшествующим байтам данного пакета. Из этого объяснения не понятно что записывать в поле контрольной суммы.

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


Воспользовавшись онлайн калькулятором CRC выясняем, что нужно вычислить CRC-16 (Modbus) с полиномом 0xA001.

Немного Python

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


Теперь попробуем получить от счетчика его серийный номер и проверить CRC. Понадобится установить модуль pyserial


Отлично! Теперь получим значения для израсходованной энергии по первому и второму тарифам, на самом деле нам нужно изменить только поле команды и распарсить результат.


Все работает. Конечный вариант скрипта выложил на git. В перспективе, планирую добавить поддержку работы по локальной сети.

Для разработки использовался Адаптер USB -> COM «Меркурий-221», но можно напрямую подключать счетчик к COM-порту.

Для кого
— Для тех кто использует OpenSCADA, но не может реализовать больше чем решения «из коробки»
— Для тех кто ищет СКАДу для себя, но так и не может определится
— Для тех кто забросил этот проект, так и не разобравшись как он работает

Зачем
— Данное решение позволяет считывать показания счетчиков меркурий 230 и меркурий 200 без каких либо лимитов
— Это бесплатно


Спустя какое то время мне понадобилось снимать показания с электросчетчиков Меркурий 230. Поддержки этих счетчиков в openscada нет. Попробовал утилиту taskgroup от создателя всем известного konfiguratorа, опрашивать счетчики по CSD ей оказалось дохлым номером. Но все не так плохо как могло быть, openscada система предельно модульная и написать свой модуль можно хоть на С++, хоть на языке высокого уровня прямо в ней. Описание протокола обмена для меркурия 230 без проблем можно найти в сети, производитель «Инкотекс» конечно может предоставить вам описание по запросу, но мне не хотелось связываться с этой волокитой.

Итак, подключаем шину со счетчиками, для наглядности и лучшей ориентации в протоколе ставим konfigurator и сниффер последовательно порта, открываем документацию. Пытаемся прочитать данные со счетчика с адресом 75.

все скриншоты кликабельны


Видим как побежали наши данные.


Протокол обмена для меркурий 230 очень похож на протокол modbus.

Запрос на открытие канала связи предназначен для разрешения доступа к данным с указанием уровня доступа. В счетчике реализован двухуровневый доступ к данным: первый (низший) — уровень потребителя, и второй (высший) — уровень хозяина


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


Теперь попытаемся это реализовать на openscada. В С++ я не силен, поэтому решил реализовать на языке, встроенном в саму СКАДу, который там зовется JavaLikeCalc.Javascript. Сам код опроса реализуется в двух модулях UserProtocol и DevLib. Создадим устройство в библиотеке устройств и назовем m230. Добавим атрибуты netaddr(сетевой адрес), password(пароль), transport(последовательный порт) и answer(ответ на запрос пароля). И напишем запрос.


Теперь перейдем к протокольной части и создадим в UserProtocol наш пользовательский протокол и назовем его так же m230. Начнем с преобразования сетевого адреса. Код расчета контрольной суммы modbus CRC16 уже был написан давно, мне осталось его только вставить в свой код.


Создадим и транспорт, прописав в нем нужный порт, скорость и тайминги.


Теперь создадим устройства в LogivLev, в нем создадим контроллер а так же параметры (они же и есть счетчики). Выбираем наш шаблон, в конфигурации прописываем сетевой адрес, пароль и транспорт.


Не лишним будет и включить архивацию в соответствующей вкладке.


Переходим ко вкладке Атрибуты и видим наши 4 байта ответа от счетчика. Пароль принят, отлично.


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


Далее добавим в наш протокол еще строки. Не лишнем будет проверить ответ на тот ли запрос пришел и проверить длину пакета. Каждый 4 байта полезной информации ответа интерпретируется своей последовательностью байт, для чтения энергии она видна на скриншоте. В конце из 16ричной системы данные переводим в десятичную, к тому же это число надо разделить на 1000.


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


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



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


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


Добавим для наглядности еще несколько счетчиков. Но это не все, данные надо не просто считывать но и представить их в удобном виде. Для этого в openscada существует Vision (рабочий пользовательский интерфейс) в котором данные можно представить в любом удобном для вас виде, хоть в виде мнемосхемы, в виде графиков, в виде документов итд. Возьмем стандартный документ из шаблона и отредактируем его чтобы получилось так.


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


В итоге запускаем проект и открываем наш документ.


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


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

Сетевой адрес тут и есть пароль счетчика. По умолчанию он равен последним 6 цифрам серийного номера. Попробуем написать шаблон.

Вот схема пакета запроса и ответа


Серийный номер счетчика слишком длинный чтоб уместить его в 32-битное целое число, поэтому поделим его на две части.

Код запроса тарифа 0x27, пишем структуру запроса и выделяем какие байты за какой тариф у нас отвечают. И делим это значение на 100. И проверяем наш ответ на объем символов.

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

Но что делать если счетчик закодирован программой наладчик+? К счастью как кодирует наладчик+ всем уже давно известно, поэтому добавляем строку в начало нашего кода.


Перейдем к протокольной стороне. Преобразовываем наш адрес в шестнадцатеричную систему. Расчет контрольной суммы и запрос как и в предыдущем протоколе.


Добавим несколько счетчиков и в конфигурации шаблона пропишем наши настройки.


И во вкладке Атрибуты видим как счетчик отдает нужные нам значения.


Создадим документ чтобы просматривать эти значения в более удобном виде. Отредактируем наш шаблон документа. Запустим наш проект.

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

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


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

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

У счетчиков электрической энергии трехфазного типа сетевой адрес находится в диапазоне 1. 254. Нулевой адрес используется в качестве группового, то есть на него отвечают абсолютно все счетчики электрической энергии. Соответственно, при нулевом адресе не будут работать команды записи. Адрес 254 используется для широкого вещания. При поступлении запроса с таким адресом всеми счетчиками электрической энергии выполняется команда без ответа. Если вы работаете с конфигуратором, то смысла в использовании такого адреса нет абсолютно никакого. Объясняется это главным образом тем, что универсальный конфигуратор ожидает ответа и в случае если никакого ответа не поступает, он считает это число за ошибку.

У счетчиков электроэнергии однофазного типа сетевой адрес в подавляющем большинстве случаев представляет собой число, которое состоит из восьми цифр. Исключение составляют только лишь Меркурий-200. Его сетевой адрес представляет собой 6тизнчное число.

У счетчиков электрической энергии трехфазного типа сетевой адрес равняется 3-м последним цифрам серийного номера, не считая года выпуска.


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

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

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

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


После всех вышеперечисленных операций останется только выбрать тип интерфейса (исключение составляет PLC):

  • RS485/CAN
  • GSM-модем
  • GSM-шлюз
  • USB-RF
  • Оптопорт
  • TCP/IP
  • IRDA

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

Читайте также: