- Учет электроэнергии, считывание информации со счетчика Меркурий 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 байт] бит 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 байт).
С пакетом вроде все понятно, осталось написать программу )