Меркурий 230 протокол обмена

Обновлено: 03.05.2024

Объясню ситуацию.Дело в том в нашей сети мы используем ПУ меркурий 200.04 и трехфазные Меркурий 230 CN;CLN;MCLN;PQCSIN.НА МЕРК 200.04 часто так бывает что выходит технологическая ошибка а именно 9999 естественно ПУ меняется так как не представляется возможность снимать показания ПУ в ручную.после ремонта модема (9999) пу устанавливается уже на другой адрес и многие потребителей беспокоит что прибор учета уже с приказаниями.Можно ли через конфигуратор или через программу меркурий 230 или Counter сбросить показания !?


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

понедельник, 16 июля 2012 г.

Пароли, уровни доступа электросчетчиков Меркурий

Фразы:
"- А есть ли в этих словах правда?
— Это уж каждый для себя решает."

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


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

1) Трехфазные счетчики Меркурий-230,231,233,234 работают немного по другому по сравнению с однофазными счетчиками Меркурий-200,202,203,206 и их идеология четка описывается протоколом обмена. В основе лежат три уровня доступа:

— уровень User (пользователь)
— уровень Admin (администратор)
— уровень завода изготовителя

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

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

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

С завода изготовителя трехфазные счетчики обычно уходят со следующими паролями доступа:
User — 111111
Admin — 222222
галочка Hex установлена, т.е. пароль в шестнадцатиричном коде (не забывайте, что если снять галочку Hex, программа будет считать что пароль в ASCII кодах).










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

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

2) Однофазные электросчетчики Меркурий-200,202,203,206 имеют немного другую идеологию, но смысл похожий. То что называется сетевым адресом у однофазного счетчика выполняет роль пароля доступа к электросчетчику. Кто знает этот пароль, тот может снимать показания, конфигурировать его внутреннюю структуру, а кто не знает, тот не может этого делать.

В основе лежат только два уровня доступа:
— уровень Admin (администратор) — это тот кто знает сетевой адрес;
— уровень завода изготовителя — работа со вскрытым счетчиком под заводскими перемычками.

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

С завода изготовителя однофазные счетчики Меркурий обычно уходят с сетевым адресом равным его серийному номеру (только Меркурий-200 делается с сетевым адресом равным последним шести цифрам серийного номера).

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


Итак, подключаем шину со счетчиками, для наглядности и лучшей ориентации в протоколе ставим 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. Также проверим наш ответ на количество байтов. Нюансы по каждому из этих значений тоже учитываем.

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


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


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


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


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

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