Вперед, только вперед...

Умный дом

  • Учет электроэнергии, считывание информации со счетчика Меркурий 230, протокол счетчика тут
  • Измерительный комплекс СГ-ТК-Д-10 (cчетчик газа BK (ВК) G6 с электронным корректором ТС220) тут
  • Встречайте следующее поколение интеллектуальных счётчиков тут

 

Подключение счетчиков

Протокол обмена merc230_v217 скачать тут

Меркурий 200.02 <-> CAN(RS485)

Источник: тут

Электросчетчик Меркурий имеет CAN-интерфейс для внешнего управления.

Скрипт mercury200-sendcmd.php отправляет команды электросчетчику и считывать ответы с него. Протокол обмена производитель свободно не распространяет. Ниже наработки по его реверсингу.
В каталоге examples пример php-cкрипта для получения параметров электросети и отправки их в облако Xively для сохранения графиков. Там же код потока для Node-RED, с помощью которого можно работать со счетчиком.

Протокол обмена "Меркурий 200"

Для общения со счетчиком необходимо знать его адрес. Для модели 200.02 это последние 6 цифр серийного номера. В моем случае это 411486 в десятичном представлении либо 06 47 5E в hex

Формат запроса

Стартовый байт Адрес счетчика Запрос CRC16 (Modbus)
1 байт 3 байта 1 байт 2 байта
00 06 47 5E    

Формат ответа

Стартовый байт Адрес счетчика Запрос
(на который отвечаем)
Ответ CRC16 (Modbus)
1 байт 3 байта 1 байт   2 байта
00 06 47 5E      

Коды запросов и ответов

Запрос
(hex)
Описание команды Ответ
02 Установить дату время
[7 байт] формат hex
[1] день недели(?)
[1] час
[1] мин
[1] сек
[1] день
[1] мес
[1] год 2 цифры
02
03 Установить лимит мощности 10*Вт
[2 байт] bcd
03
04 Установить лимит энергии кВт*ч/мес
[2 байт] bcd
04
05 Установить флаг перехода на зимнее.летнее
[1 байт]
0 - летнее / 0xFF - зимнее
05
06 Коррекция времени 0-31 минут
[1 байт]
0-31(dec) +минут вперед
06
07 Установки для испульсного выхода чтения (светодиод)
[1 байт]
0-5000 импульсов
1-10000 импульсов
2-Частота кварца
3-Управление нагрузкой
07
09 Коррекция доп.параметров
[1 байт]:
бит 0 - тариф 1
бит 1 - тариф 2
бит 2 - тариф 3
бит 3 - тариф 4
бит 4 - сумма
бит 5 - мощность
бит 6 - время
бит 7 - дата
09
0A Установить кол-во тарифов
[1 байт]
тариф 1-4
0A
0D Установить параметры отображения инфор. на дисплее
[4 байта], секунды
[1] Нетекущий тариф
[2] Текущий тариф
[3] Мощность, время, дата
[4] Дополнительные параметры
0D
10 Установить праздники
[17 байта]
8 x [2 байта] - день месяц bcd
если идет 0xFF 0xFF - то данных нет
[1] 0x00-page 0, 0x01-page 1, 0x02-page2, etc..
10
11 Назначить тарифное расписание
[17 байт]
8 x [2 байта] - день месяц bcd, расшифровка ниже
если идет 0xFF 0xFF - то данных нет
[1 байт] - часы
[2 байт] 0-5 биты - минуты
               6-7 биты - тариф 0-3
[последний байт] 0x01-page 0, 0x02-page 1, etc...,0x60-page96
Например: Январь - 8 страниц (пн-вс, праздник)
12 месяцев х 8 = 96 страниц всего
11
21 Текущая дата и время [7 байт] формат hex
[1] день недели(?)
[1] час
[1] мин
[1] сек
[1] день
[1] мес
[1] год 2 цифры
22 Лимит мощности [2 байта] bcd
99990 Вт
23 Лимит энергии [2 байта] bcd
9999 квт*ч
24 Флаг перехода зимнее.летнее [1 байт] - 0 / 0xFF
25 Флаг разрешения коррекции времени кнопками [1 байт] - 0 / 0xFF
26 Чтение мощности  
27 Значение энергии [16 байт]
[4] Тариф1
[4] Тариф2
[4] Тариф3
[4] Тариф4

Результат в (кВтч)100
28 Версия [6 байт]
[1] версия
[1] подверсия
[1] -
[1] день
[1] месяц
[1] год
29 Напряжение встроенной батарейки [2 байта]
[1] Единицы Вольт
[1] Десятые доли Вольт
2A

Индикация на дисплее
(тарифы 1,2,3,4, сумма,
доп.параметры: мощность,
дата время)

[1 байт]
бит 0 - тариф 1
бит 1 - тариф 2
бит 2 - тариф 3
бит 3 - тариф 4
бит 4 - сумма
бит 5 - мощность
бит 6 - время
бит 7 - дата
2B Время последнего выключения [7 байт] формат hex
[1] день недели(?)
[1] час
[1] мин
[1] сек
[1] день
[1] мес
[1] год 2 цифры
2C Время последнего включения [7 байт] формат hex
[1] день недели(?)
[1] час
[1] мин
[1] сек
[1] день
[1] мес
[1] год 2 цифры
2D Функция испульсного выхода чтение [1 байт]
0-5000 импульсов
1-10000 импульсов
2-Частота кварца
3-Управление нагрузкой
2E Тарифы [1 байт] количество тарифов
тарифы: 1,2,3,4
2F Серийный номер [4 байта] формат hex
30 Тарифное расписание по датам
0x00-page 0, 0x01-page 1, 0x02-page2, etc...
[16 байт]
8 x [2 байта] - день месяц bcd
если идет 0xFF 0xFF - то данных нет
31 Тарифное расписание
0x01-page 0, 0x02-page 1, etc...,0x60-page96
Например: Январь - 8 страниц (пн-вс, праздник)
12 месяцев х 8 = 96 страниц всего
[16 байт]
8 x [2 байта] - день месяц bcd
если идет 0xFF 0xFF - то данных нет
[1] - часы
[1] 0-5 биты - минуты
     6-7 биты - тариф 0-3
32 Считать архивы накопленной энергии:
0x00-январь, 0x01-февраль, etc...,0x0B-декабрь
[16 байт]
[4] Тариф1
[4] Тариф2
[4] Тариф3
[4] Тариф4
Результат в (кВтч)100
61 Последнее открытие корпуса [7 байт] формат hex
[1] день недели(?)
[1] час
[1] мин
[1] сек
[1] день
[1] мес
[1] год 2 цифры
62 Последнее закрытие корпуса [7 байт] формат hex
[1] день недели(?)
[1] час
[1] мин
[1] сек
[1] день
[1] мес
[1] год 2 цифры
63 Текущие параметры электросети [7 байт]
[2] Напряжение в Вольт10
[2] Ток в Ампер
100
[3] Мощность в Ваттах
65 Служебная информация  
66 Дата изготовления [3 байта]
[1] день
[1] месяц
[1] год
67 Индикация на дисплее
(время индикации в сек)
[4 байта], секунды
[1] Нетекущий тариф
[2] Текущий тариф
[3] Мощность, время, дата
[4} Дополнительные параметры
87 Служебная информация n/a

Примеры

Чтение параметров электросети
Запрос: 00 06 47 5E 63 EC D4
Ответ: 00 06 47 5e 63 23 58 02 64 00 05 88 45c6
235,8 Вольт; 2,64 Ампера; 588 Ватт

Чтение накопленная энергии
Запрос: 00 06 47 5E 27 ECE7
Ответ: 00 06 47 5E 27 00062142 00020834 00000000 00000000 59F5
621,42 кВтч(Т1); 208,34 кВтч(Т2); 0 кВтч(Т3); 0 кВтч(Т4)

 

Сбор показаний со счетчиков "Меркурий 200-203"

Источник: тут

Однажды возникла задача — научится считывать показания со счетчиков «Меркурий 200-203-206» ...

Первым делом оказалось, что счетчики золотые, на сайте кроме паспортов и примитивного описания ничего более нет.
Это и понятно, НПК-Инкотекс взял за основу пакет Modbus RTU (убрал из него все логичное и полезное — решив использовать фиксированные поля, без кода ошибок и т.д.,) расширив поле ID до 4-х байт, оставшееся было наречено «собственным протоколом». Что позволяет продавать (в единственном лице) конвертеры из «собственного протокола» в нормальный Modbus.

Первым делом был скачан с офсайта конфигуратор:

Подключен сам счетчик (USB-485), и подсмотрены сами пакеты:

Оказалось, что конфигуратор совершал 7 запросов, а именно:
— 0x28 (Чтение идентификационных данных счетчика)
— 0x2F (Чтение псевдосерийного номера)
— 0x29 (Чтение напряжения на литиевой батарее)
— 0x2C (Чтение времени последнего включения напряжения)
— 0x2B (Чтение времени последнего отключения напряжения)
и неизвестные 0x66-65
Далее было раздобыто описание «протокола» и стало совсем все понятно.
В запросе ID это первые четыре байта (0x000D1F или 859973), байт команды и два байта CRC.
В ответе так же ID, команда и набор параметров (длина представляет магическую цифру, определяется самим параметром, может быть от 0 до 17 байт).
С пакетом вроде все понятно, осталось написать программу )

 

 

 

<< Вернуться на предыдущую страницу