четверг, 5 мая 2016 г.

Протокол счетчиков Меркурий 230. Описание основных команд.


В продолжение предыдущего поста, посвященного длинным командам в PLC I  размещаю выжимку из описания системы команд трехфазных счетчиков Меркурий/ Эти основные команды  трехфазного счетчика Меркурий, можно использовать  для  управления и получения дополнительных данных в системах PLC I, использую функцию передачи длинных команд, и в системах PLC II, которая позволяет не только передавать любые команды счетчикам, но и получать практически любые, хранимые и регистрируемые счетчиками данные.

Ниже описывается четыре основных запроса: 01h, 03h, 05h и 08h выполняющих соответственно открытие канала связи, запись параметров, чтение регистров энергии и чтение параметров. Запросы имеют определенную структуру, содержат параметры, и другие составляющие. Описание всех параметров и составляющих содержится в соответствующих каждому запросу таблицах.  Для облегчения понимания приводятся примеры. Если возникнет необходимость в дополнительных примера - пишите в комментариях. Примеры будут добавляться по требованию.

При работе с трехфазными счетчиками Меркурий (Меркурий 230, Меркурий 233, Меркурий 236 и Меркурий 234) к команде отправляемой счетчику необходимо добавлять в начало посылки байт - "01" . Для однофазных счетчиков этого не требуется.

Команда открытия канала связи со счетчиком:



Код запроса =1h
(1 байт)
Уровень доступа
(1 байт)
Пароль (6 байт)

Например:

01 02 02 02 02 02 02 02


Команды записи.

Код запроса =3h
(1 байт)
Номер
параметра
(1 байт)
Параметры
(1...16 байт)

Перечень записываемых параметров. Таблица 2.

параметра
Наименование
Параметр
Уровень доступа
01h
Запись параметров индикации счетчика (по индицируемым тарифам)
8 позиционных байт (см формат).
1,2,3

02h
Запись параметров индикации счетчика (по периодам индикации)
4 двоичных байта (см формат).
1,2,3

2)08h
Фиксация данных
Нет
без открытия канала связи

10h
Запрет записи параметров по PLC1
1 байт:
«0»  выключен
«1»  включен
2,3

7)16h
Перезапустить счетчик
Нет
2,3

18h
Разрешить/запретить автоматический переход на зимнее/летнее время
1 байт:
«0»  разрешить
«1»  запретить
2,3

8) 19h
Значения времени перехода для летнего и зимнего времени
2/10 код, 6 байт в последовательности:
час, день, месяц перехода на летнее время,
час, день, месяц перехода на зимнее время.
2,3

1Fh
Изменить пароль.
13 байт:
1-й байт – уровень доступа (1 или 2);
следующие 6 байт – старый пароль;
следующие 6 байт – новый пароль.
1,2,3

22h
Запись местоположения прибора
4 байта
2,3

27h
Изменение постоянной счетчика
1 байт:
«0»  режим   «А»
«1»  режим   «В»
2,3

h
Изменение режима тарификатора  

1 байт:
«0» многотарифный
«1»  однотарифный
2,3

2Ch
Установка лимита активной мощности
3 байта

2,3

2Dh
Включение контроля превышения лимита активной мощности
1 байт:
«0»  выключен
«1»  включен
2,3

2Eh
Установка лимита потребленной активной энергии
1+4 байта
1-й байт:
«1»  тариф 1
«2»  тариф 2 и т.д.
2,3

2Fh
Включение контроля превышения потребленной активной энергии
1 байт:
«0»  выключен
«1»  включен
2,3

30h
Изменение режима импульсного выхода  

1 байт:
«0»  телеметрия
«1»  вкл./выкл. Нагрузки
2,3

31h
Изменение режима управления нагрузкой
1 байт:
«0»  включена
«1»  выключена
2,3

32h
Изменение множителя тайм-аута
1 байт со значениями 01hFFh.
1,2,3

Формат данных при  записи параметров индикации:

A+ авт-кий режим
(1 байт)
Не исп.
(1 байт)
R+ авт-кий режим
(1 байт)
Не исп.
(1 байт)
A+ ручной режим
(1 байт)
Не исп.
(1 байт)
R+ ручной режим
(1 байт)
Не исп.
(1 байт)

Байт определения индицируемых тарифов:

7
6
5
4
3
2
1
0


Потери
Тариф 4
Тариф 3
Тариф 2
Тариф 1
Сумма


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

Байт определения индицируемых тарифов будет иметь следующий формат: 
00000001b =01h. Записываем этот байт на свои места в восьмипозиционный параметр (см Таблицу 2).

Запрос: 03 01 01 00 01 00 1F 00 1F 00

Формат данных при  записи параметров индикации:

Длительность периода индикации
(1 байт)
Длительность индикации текущего тарифа
(1 байт)
Длительность индикации нетекущего тарифа
(1 байт)
Длительность тайм-аута
при возврате в автоматический режим
(1 байт)

Пример: установка длительности  индикации равной 5 сек.

Запрос: 03 02 05 05 05 05

Пример: включение контроля лимитов мощности.

Запрос: 03 2В 01



Запроса на чтение массивов регистров накопленной энергии

Код запроса = 5h
(1 байт)
№ массива
№ месяца
тарифа
(1 байт)
(1 байт)

Третий байт запроса разбит на два полубайта: старший полубайт – номер считываемого массива, младший полубайт – номер месяца, за который считывается энергия при запросе энергии за месяц. При запросах не связанных с номером месяца младший полубайт третьего байта не имеет значения.
Четвертый байт – номер тарифа, по которому считывается накопленная энергия, может принимать значения: 0 –энергия по сумме тарифов , 1 –энергия по тарифу 1,  2 – энергия по тарифу 2 и т.д.. Для считывания данных об энергии технических потерь значение номера тарифа должно быть равно 5.
 
Перечень считываемых массивов и содержание поля данных ответа, в случае корректного запроса и отсутствия внутренних ошибок^


1h За текущий год
2h За предыдущий год
3h За месяц
4h За текущие сутки
5h За предыдущие сутки
6h Пофазные значения накопленной активной энергии прямого направления (только для кода запроса 5h)
9h На начало текущего года
Ah На начало предыдущего года
Bh На начало месяца
Ch На начало текущих суток
Dh На начало предыдущих суток
16 байт.
16 байт.
16 байт.
16 байт.
16 байт.
12 байт.


16 байт.
16 байт.
16 байт.
16 байт.
16 байт.

Если поле данных ответа содержит 16 байт, то отводится по четыре двоичных байта на
каждый вид энергии в последовательности: активная прямая (А+), активная обратная (А-), реактивная прямая (R+), реактивная обратная (R-) для кода запроса 5h; реактивная R1, R2, R3, R4 –для кода запроса 15h.
Если поле данных ответа содержит 12 байт, то отводится по четыре двоичных байта на
каждую фазу энергии А+ в последовательности: активная прямая по 1 фазе, активная прямая по 2 фазе, активная прямая по 3 фазе.
Формат поля данных для каждого вида энергии

2-й байт данных
1-й байт данных
4-й байт данных
3-й байт данных

Разрешающая способность регистров накопленной энергии соответствует 1 Втч(ВАрч).
При запросе с номером тарифа 6, значения энергии в ответе расположены в порядке: T1,
T2, T3, T4, сумма по тарифам, потери (если ведется учет).
Длина ответа варьируется в зависимости от вида учета (суммарный/пофазный) и наличия
функции учета энергии технических потерь. Примечание:

Пример: Прочитать количество энергии за первый месяц по сумме.

Запрос: 05 31 00
Ответ: 02 00 E8 03 FF FF FF FF 00 00 70 0A 00 00 00 00

02 00 E8 03– активная прямая энергия, в соответствии с форматом поля данных интерпретируется как 000203E8

FF FF FF FF – активная энергия обратного направления, не учитывается данным счетчиком

00 00 70 0A – реактивная прямого направления, интерпретируеся как 00000A70


00 00 00 00 – реактивная энергия обратного направления, не учитывается данным счетчиком.

NA+ = 0203E8h = 132072d ER+ = 132,072 кВт/ч
NR+ = 0A70h = 2672d ER+ = 2672 вар/ч
NR- = 0000h = 0000d ER- = 0000 вар/ч


Запроса на чтение параметров.

Код запроса = 8h
(1 байт)
№ параметра
(1 байт)
Параметры
(0...1 байт)
 

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

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

1h
Ускоренный режим чтения индивидуальных параметров прибора.
16 байт. Серийный номер и дата выпуска, версия ПО, вариант исполнения.

17h
Чтение байта состояния тарификатора.
2 двоичных байта (первый=0).

18h

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

19h
Чтение лимита мощности.
3 двоичных байта.

1Ah
Чтение лимита энергии по тарифу 1-4 (см формат).
4 двоичных байта.

1Bh
    Чтение параметров индикации счетчика (по индицируемым тарифам)
    8 позиционных байт (см формат).



Пример: Чтение серийного номера счетчика и даты выпуска. 
Команда предназначена для чтения серийного номера счетчика и даты выпуска. 
Код параметра 00h. 
Поле параметров отсутствует. 
В ответ на запрос счетчик возвращает 7 байт в поле данных ответа. 
Первые 4 байта - серийный номер в двоичном позиционном коде, следующие 3 байта - дата выпуска в 2/10-м коде в последовательности: число, месяц, год.
 

Запрос: 08 00 
Ответ: 04 2А 0В 3B 02 06 06

04 2A 0B 3B - серийный номер 04471359
02 06 06 - год выпуска 02.06.2006

39 комментариев:

  1. Раз уж опубликовали основу, то почему бы не выложить в свободном доступе протокол полностью? Ведь рассылаете его по запросу, следовательно ничего секретного в них нет. Сделаете на сайте в разделе "документация" отдельную тему - "Протоколы" и там поместите последние версии протоколов всех счетчиков. По-моему, все будут только благодарны.

    ОтветитьУдалить
    Ответы
    1. Сам неоднократно предлагал руководству это сделать - руководство эту идею не поддерживает, настаивает на сохранении процедуры получения по официальному запросу.

      Удалить
  2. Я сам получал протокол М-233 в 2010 году по запросу. Теперь уже нигде не работаю, но по-прежнему интересуюсь новинками вашей продукции. Лет прошло много, и наверняка в протоколах что-то изменилось. Так от кого должен сейчас написать запрос? Можно от физического лица?

    ОтветитьУдалить
    Ответы
    1. Вам от какого счетчика надо протокол?

      Удалить
  3. В идеале, хотел бы собрать полную "коллекцию" трехфазных и однофазных, чтобы увидеть эволюцию. Но сейчас в нашем СНТ буду расширять систему из М-233, поэтому нужен протокол для Меркурий-234 и Меркурий-206 (есть и однофазные абоненты).

    ОтветитьУдалить
  4. Анонимный25 мая 2016 г., 3:13

    Вот здесь можно скачать протокол трехфазного счетчика:

    https://yadi.sk/i/y_tJZ6rxryfih

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

    ОтветитьУдалить
  5. Как можно поменять пароль второго уровня через PLC ?
    Есть обьект (три подьезда), где установлено более 300 Меркурий 230 ART-01 CLN.
    Каждый счётчик обойти с компьютером не получится для смены пароля!

    ОтветитьУдалить
    Ответы
    1. Команда 1Fh, она указана выше. Но надежнее все же сделать это через последовательный интерфейс.

      Удалить
    2. Ведь утеряв пароль второго уровня сбросит его можно будет только в заводских условиях.

      Удалить
    3. Приведите реальный пример смены пароля по PLC !.
      Я понимаю, что лучше по проводному интерфейсу , как обойти все квартиры , все нужно распломбировать , запломбировать.

      Так никто не собирается его терять !

      Удалить
  6. Если я хочу получить только: Чтение серийного номера счетчика и даты выпуска.
    Мне сначала отправлять открытие канала связи, а уже потом чтение параметров? или нужно все четыре команды отправлять?
    можете написать просто пример кода как это сделать?

    ОтветитьУдалить
    Ответы
    1. По какому каналу связи, по какому интерфейсу Вы планируете это делать?

      Удалить
    2. через COM порт

      Удалить
    3. Канал связи всегда необходимо открывать, как для чтения данных так и для записи. Подробнее это описано в описании системы команд интересующего счетчика.
      Образцы кода запросов есть в описании. В комментариях выше есть ссылка для скачивания описания.

      Удалить
    4. я просто не пойму, мне отправлять сразу байты одной строкой где указать что открываем, уровень доступа, пароль, адрес, команду, и в конце КС? и КС рассчитывается для чего? всего что отправляем?

      Удалить
  7. Приведите реальный пример смены пароля по PLC !.
    Я понимаю, что лучше по проводному интерфейсу , как обойти все квартиры , все нужно распломбировать , запломбировать.

    Так никто не собирается его терять !

    ОтветитьУдалить
  8. Столкнулся со следующей ситуацией: пытаюсь записать текущее время в счетчик командой коррекции времени (0Dh) с первым уровнем доступа. Счетчик (Меркурий 230, выпуск 28.07.10, версия ПО 2.2.86) отвечает на это «недопустимая команда» (X1h).
    Подскажите пожалуйста, почему? Команда корректна и в протоколе указанно, что эта операция может выполнятся как с 1-ым уровнем, так и с 2-ым.

    ОтветитьУдалить
    Ответы
    1. Скорее всего в Вашем счетчике нет таймера и поэтому собственно нечего корректировать.

      Удалить
  9. Следующая проблема с запросом чтения массивов накопленной энергии: массив данных с информацией приходит только если старший полубайт 3 байта равен 0 (в документе "Краткое описание..." это соответствует типу массива "Чтение накопленной энергии
    от сброса", в этом посте такой тип массива не перечислен). Во всех остальных случаях приходит ответ 0x01 (недопустимая команда). Версия ПО 2.3.5.
    Пример отправляемого запроса (получение данных за первый месяц, такой же как в этом посте):
    49-05-31-00-13-E9
    Ответ:
    49-01-F7-E0
    Меркурий 230, версия ПО 2.3.5. Подскажите в чем может быть причина?

    ОтветитьУдалить
    Ответы
    1. Этот пост подразумевался для помощи управления счетчиками по каналу PLC. При использовании данной технологии возникает необходимость отправки произвольных команд для управления и запроса данных. Формирование этих команд и описано здесь, т.е. указаны только основные команды, которые могут понадобиться в непрофессиональной сфере.
      По Вашему запросу надо бы уточнить какой счетчик Вы опрашиваете. Какая модификация?

      Удалить
    2. Более точную модификацию, к сожалению, не знаю, если это важно для решения проблемы - уточню. Есть ли модификации которые поддерживают считывание только энергии от сброса?

      Удалить
    3. Модель счетчика спрашивал что бы убедиться что в счетчике есть таймер.
      Монитором порта не пользовались? Что возвращает счетчик на запрос?

      Удалить
    4. Счетчик подключен по RS485 к коммуникатору, коммуникатор пробрасывает данные от RS485 на сервер по TCP, поэтому непосредственно порт мониторить не могу. Но можно посмотреть что приходит по TCP, счетчик возвращает 49-01-F7-E0 на любой запрос типа 0x05, если 4 старших бита в 3-ем байте > 0 (это полный ответ, вместе с адресом и контрольной суммой). Такая ситуация со всеми 230-ми счетчиками, которые у нас есть.

      Удалить
    5. легко промониторить с помощью Tibbo http://tibbo.com/soi/software.html

      Удалить
    6. Если я правильно понимаю, это ПО работает только с определенными устройствами поддерживающими DS Manager protocol, наши коммуникаторы его не поддерживают. А как бы помог анализ ответа счетчика через монитор порта? Коммуникатор все данные кроме управляющих пробрасывает, ответ счетчика по структуре корректный: адрес-байт состояния-контрольная сумма. Разве не в запросе надо искать причину (или в его интерпретации счетчиком)? Очевидно, что запрос счетчик получает именно в том виде в котором он отправляется иначе не прошла бы проверка контрольной суммы и счетчик не ответил согласно документации. Я продублирую вопрос в заявке в тех. поддержку на mail@incotexcom.ru, результат напишу здесь на случай если он будет полезен кому-то еще.

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

      В теории к счетчику можно подойти и опросить по любому доступному интерфейсу, а запросы и ответы промониторить например FreeSerialPortMonitor

      Удалить
    8. Разобрались. Причина в том, что к системе подключены счетчики как модификации AR так и ART. При этом не зная об этом тестировали на AR, который не должен хранить виды архивов кроме "от сброса" и указанная ошибка на нем закономерна. Проверил чтение на модификации ART, архивы читаются. Спасибо за помощь.

      Удалить
  10. Добрый день! Скажите пожалуйста с какой версии ПО счетчика поддерживаются показания на начало суток. В старых счетчиках Меркурий 230 эти запросы не поддерживались.

    ОтветитьУдалить
    Ответы
    1. В документации не указано с какой версии ПО поддерживаются, но у нас они считаются на всех приборах где в названии модели есть "T", 230 ART, например. И не читаются на тех моделях где "T" в модели нет. "T" означает наличие внутреннего тарификатора, от него зависит поддержка считывания типов архивов кроме "от сброса". Более точно, мы читаем не данные на начало суток, а за предыдущий день и по месяцам. Самая низкая версия ПО которая мне попалась 2.2.54. Представители тех. поддержки, вероятно, смогут дать более точную информацию.

      Удалить
    2. Спасибо за ответ, Владимир! Придется, наверное, сделать сначала делать запрос на начало суток, если счетчик вернет статус "Недопустимая команда или параметр", то использовать расчетные показания: "Энергия от сброса"-"Энергия за текущие сутки"

      Удалить
    3. Функция регистрации данных по потребленной энергии на начало суток, месяца и года в Меркурий 230 ART с версии ПО 1.5.8 (июль 2003 г). Чтение значений нергии "на начало периода" - с использованием таблицы физических адресов памяти 2.

      в 2011 г. произошли изменения в протоколе счётчика Меркурий 230 (изменились команды чтения архивов накопленной энергии на начало периода) С версии ПО 2.3.2 Меркурий 230.

      Удалить
  11. Еще можно через протокол получить информацию о наличии тарификатора, она содержится в структуре варианта исполнения счетчика.

    ОтветитьУдалить
  12. Тарификатор 0–внешний 1-внутренний. Если 1, значит показания на начало суток есть?

    ОтветитьУдалить
    Ответы
    1. Да, так. Единственное, в документации которая у меня есть нет вообще варианта "на начало суток", есть только "за предыдущий день". Или это одно и то же?

      Удалить
    2. Нет, ни одно и тоже. Скорее всего "на начало суток" - это от сброса, но не текущее значение, а на начало дня. А "за предыдущий день" - это конкретно за период дня. Вероятно, здесь как раз есть зависимость от версии ПО, но при отсутствии тарификатора информации точно не будет кроме "от сброса"

      Удалить
    3. Это разные параметры. За предыдущий день - это энергия за предыдущий день, а на начало предыдущих суток - это энергия от сброса до начала предыдущих суток, т.е. показания, которые были на 00:00 вчерашних суток.
      На этой странице приведены номера массивов для этих параметров:
      Ah На начало предыдущего года
      Bh На начало месяца
      Ch На начало текущих суток
      Dh На начало предыдущих суток

      Удалить
  13. Анонимный2 июня 2017 г., 7:11

    Здравствуйте!
    Не мог ли бы Вы каким-нибудь образом прислать мне полный протокол системы команд по электросчетчику Меркурий-230ART.
    Или необходимо каким-то другим образом его получить?

    ОтветитьУдалить
  14. Анонимный23 июня 2017 г., 5:43

    Здравствуйте!
    Подскажите, при возможности, причину самохода счетчика Меркурий 230 ART-03 PQRSIDN дата выпуска январь 2017
    Заранее спасибо!

    ОтветитьУдалить