Опрос


Что для Вас Умный Дом?


Результаты


Реклама


Учет электроэнергии, считывание информации со счетчика Меркурий 230, протокол счетчика

04/04/2009 11:46:52

Когда я подключал свой дом к 3-х фазной линии электроснабжения я решил, что неплохо было бы поставить электрический счетчик с возможностью считывания показаний накопленной энергии. Подобные счетчики на тот момент выпускали такие предприятия как Концерн "Энергомера" и Фирма "Инкотекс". Я выбрал счетчик Меркурий-230ART фирмы "Инкотекс" с интерфейсом CAN. Согласно документации счетчик позволял считывать не только данные по накопленной энергии, но также такие параметры как мгновенные значения мощности, тока, напряжения по каждой фазе, частота сети, коэффициент мощности и другие.

Таким образом, своими силами (а это допускалось) был подготовлен вводной щиток с установленным счетчиком и УЗО.

     

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

После того, как был запущен сервер домашней автоматизации и были реализованы некоторые функции системы, я вновь вернулся к вопросу автоматизированного учета и мониторинга потребляемой электроэнергии. С этой целью за 2100 руб (а стоимость счетчика на июнь 2008 составляла 4500 руб) был куплен так называемый преобразователь интерфейсов "Меркурий-221". Это устройство представляет собой преобразователь интерфейсов USB в CAN/RS485/RS232. В комплекте с преобразователем также шел диск с драйвером и ПО для различных счетчиков, в том числе для Меркурий-230. При подключени к компьютеру на базе Windows (да, пришлось установить Microsoft Windows 2003) драйвер создал виртуальный COM-порт. Далее меня ждало разочарование в виде ужасного и, не побоюсь этого слова, глючного ПО, которое называлось "КОНФИГУРАТОР".

Параметры связи: 9600, четность: нет, стоп-бит: 1
Прежде чем использовать программу, необходимо ввести пароль (111111 или 222222 по умолчанию) и нажать кнопку "Открыть". Очевидно, не правда ли?..

Но самое печальное - это то, что программа не умеет экспортировать данные. Какие-то зачатки такого эскпорта в программе есть, в коде зашиты жесткие пути к каким-то базам, формат которых неизвестен. Фактически эта функция отсутствовала. Оставалось только поставить на этот компьютер Remote Desctop и лицезреть все значения и параметры, которые передавал счетчик вручную. Конечно, такое положение вещей меня не устраивало. У меня работала база данных (MySQL) на сервере с ОС Linux и мне нужно было иметь все значения там. Это позволило бы вести полноценный учет, строить любые произвольные графики и диаграммы.

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

В качестве выхода я видел только одно - выяснить протокол, с помощью которого родное ПО общается со счетчиком. Фирма "Инкотекс" говорит, что протокол не является военной тайной, однако чтобы его получить необходимо написать официальное письмо на имя директора предприятия, где указать причины, по которым понадобилось описание протокола. В случае, если руководство сочтет, что причины достаточно весомые, описание протокола будет предоставлено. Но есть и более простой способ выяснить необходимое - COM Port Sniffer/Monitor.

Потребовалось всего несколько часов, чтобы выяснить основные принципы работы протокола Меркурий 230.
Все общение по COM-порту происходит шеснадцатиричными кодами.

 

Инициализация соединения и передача пароля
команда
#00#01#01#01#01#01#01#01#01#77#81
где 111111 - пароль
ответ
#00#01#01#01#01#01#01#01#01#77#81#00#00#01#B0

Опрос накопленной энергии от начала сброса
команда
#00#05#00#00#10#25
ответ
#00#05#00#00#10#25#00#75#00#8F#A3#FF#FF#FF#FF#15#00#A6#9F#FF#FF#FF#FF#C5#92
где байты #75#00#8F#A3 отражают показание накопленной энергии.

Читать значения необходимо так: #00#75#A3#8F, то есть позиции 8,7,10,9.
Если мы шеснадцатиричное число 0075A38F преобразуем в десятичное, то получим число 7709583. Три последних знака - числа после запятой, а итоговое значение накопленной энергии 7709,583. Остальные значения, которые отдает счетчик в данном ответе касаются реактивной энергии.

Аналогично другие значения:

За предыдущие сутки
#00#05#50#00#2C#25
#00#05#50#00#2C#25#00[#00#00#A2#79]#FF#FF#FF#FF#00#00#80#14#FF#FF#FF#FF#4B#B9
Скобками показано интересующее нас значение.

За текущие сутки
#00#05#40#00#21#E5
#00#05#40#00#21#E5#00[#00#00#10#B5]#FF#FF#FF#FF#00#00#44#21#FF#FF#FF#FF#75#46

Сила тока (А) по фазам
#00#08#16#21#4F#9E
#00#08#16#21#4F#9E#00#00[#25#04]#00[#4E#09]#00[#B8#1F]#AF#BA
где,
#25#04 = h0425 = 1,061 (Фаза 1)
#4E#09 = h094E = 2,382 (Фаза 2)
#B8#1F = h1FB8 = 8,120 (Фаза 3)

Коэффициент мощности (С) по фазам
#00#08#16#30#8F#92
#00#08#16#30#8F#92#00#00[#C6#03]#00[#9A#03]#00[#8D#03]#00[#DD#03]#9E#76
первое значение - сумма

Частота Гц
#00#08#16#40#8E#76
#00#08#16#40#8E#76#00#00[#8A#13]#26#89

Угол между фазами
#00#08#16#51#4E#7A
#00#08#16#51#4E#7A#00#00[#AC#5D]#00[#2A#2F]#00[#1D#5E]#6F#55

Мощность P (Вт) по фазам
#00#08#16#00#8F#86
#00#08#16#00#8F#86#00[#03#D6#A9][#00#36#4F][#00#06#B6][#02#9A#A4]#3E#60

Мощность S (ВА)
#00#08#16#08#8E#40
#00#08#16#08#8E#40#00[#03#EE#C9]#00[#DA#55]#00[#17#C8]#02[#FD#AB]#D3#7D

Напряжение U (В)
#00#08#16#11#4F#8A
#00#08#16#11#4F#8A#00#00[#BB#50]#00[#EF#53]#00[#3A#54]#BD#09

Завершение сеанса
#00#02#80#71
#00#02#80#71#00#00#01#B0

Осталось только написать программу. Так как я планировал подключить преобразователь интерфейсов к Linux'у, то необходимо было написать такую программу, которая бы работала как в среде Windows, так и в Linux'е. Самым очевидным было использовать Perl или PHP. И выбран был PHP.

<?

###### Для Windows
# Windows не поддерживает функцию usleep(). А это вместо нее
function usleep_win($msec) {
   $usec = $msec * 1000;
   socket_select($read = NULL, $write = NULL, $sock = array(socket_create (AF_INET, SOCK_RAW, 0)), 0, $usec);
}

# Вот такая инициализация COM-порта в Windows
exec('mode com3: baud=9600 data=8 stop=1 parity=n xon=off');

# Для работы с COM-портом в PHP используем набор функций Direct IO
$fd = dio_open('com3:', O_RDWR);


##### Для Linux

//dio_fcntl($fd, F_SETFL, O_SYNC);

/*
dio_tcsetattr($fd, array(
  'baud' => 9600,
  'bits' => 8,
  'stop'  => 1,
  'parity' => 0
)); 
*/

############## 
# Основная функция для обмена данных со счетчиком
function merc_gd($cmd, $factor = 1, $total = 0)
{
	global $fd;
	global $sleep_time;

	usleep_win(50);
	flush();
	dio_write($fd, $cmd, 6);
	usleep_win($sleep_time);
	$result = dio_read($fd, 64);

	$ret = array();
	
	if ( $total != 1 )
	{
		if ( dechex(ord($result[7])) >= 40 )
		$result[7] = chr(dechex(ord($result[7])) - 40);
		if ( dechex(ord($result[10])) >= 40 )
		$result[10] = chr(dechex(ord($result[10])) - 40);
		if ( dechex(ord($result[13])) >= 40 )
		$result[13] = chr(dechex(ord($result[13])) - 40);
		if ( dechex(ord($result[16])) >= 40 )
		$result[16] = chr(dechex(ord($result[16])) - 40);

		$ret[0] = hexdec(dd($result[7]).dd($result[9]).dd($result[8]))*$factor;
		if ( strlen($result) > 12 )
		$ret[1] = hexdec(dd($result[10]).dd($result[12]).dd($result[11]))*$factor;
		if ( strlen($result) > 15 )
		$ret[2] = hexdec(dd($result[13]).dd($result[15]).dd($result[14]))*$factor;
		if ( strlen($result) > 18 )
		$ret[3] = hexdec(dd($result[16]).dd($result[18]).dd($result[17]))*$factor;
	}
	else
	$ret[0] = hexdec(dd($result[8]).dd($result[7]).dd($result[10]).dd($result[9]))*$factor;


	return $ret;
}

$sleep_time = 200;

function dd($data = "")
{
	$result = "";
	$data2 = "";
	for ( $j = 0; $j < count($data); $j++ )
	{
		$data2 = dechex(ord($data[0]));
		if ( strlen($data2) == 1  )
		$result = "0".$data2;
		else
		$result .= $data2;

	}
	return $result;
}

# Инициализация соединения, передача пароля
dio_write($fd, "x00x01x01x01x01x01x01x01x01x77x81", 11);
usleep_win($sleep_time);
$result = dio_read($fd, 15);

$n = 0;
$total_cnt = 90;
$total_cnt1 = 370;
while ( $n == 0 )
{

	# Сила тока по фазам
	# =====================================================
	$Ia = merc_gd("x00x08x16x21x4Fx9E", 0.001);
	echo "Ia: $Ia[0] - $Ia[1] - $Ia[2]";
	# Мощность по фазам
	# =====================================================
	$Pv = merc_gd("x00x08x16x00x8Fx86", 0.01);
	echo "Pv: $Pv[0] - $Pv[1] - $Pv[2] - $Pv[3] $error";
	# Cosf по фазам
	# =====================================================
	$Cos = merc_gd("x00x08x16x30x8Fx92", 0.001);
	echo "Cos: $Cos[0] - $Cos[1] - $Cos[2] - $Cos[3]";
	# Напряжение по фазам
	# =====================================================
	$Uv = merc_gd("x00x08x16x11x4Fx8A", 0.01);
	echo "Uv: $Uv[0] - $Uv[1] - $Uv[2]";

	$total_cnt++;
	# Каждые 15 минут собираем информацию о текущем потреблении за сутки
	if ( $total_cnt >= 90 )
	{
		$Tot = merc_gd("x00x05x00x00x10x25", 0.001, 1);
		echo "Total: $Tot[0]";

		// За текущие сутки
		$Tot = merc_gd("x00x05x40x00x21xE5", 0.001, 1);
		echo "Total cur: $Tot[0]";
		$total_cnt = 0;
	}

	$total_cnt1++;
	if ( $total_cnt1 >= 370 )
	{
		// За предыдущие сутки
		$Tot = merc_gd("x00x05x50x00x2Cx25", 0.001, 1);
		echo "Total prev: $Tot[0]";

		$total_cnt1 = 0;
	}


	sleep(10);
}

# Завершение соединения
dio_write($fd, "x00x02x80x71", 4);
usleep_win($sleep_time);
$result = dio_read($fd, 8);
dio_close($fd);

?>

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

Ну а далее оставалось только вывести полученные значения на сайт моего Умного Дома...

Сбор данных происходит каждые 10 секунд, поэтому после выгрузки данных из БД в массив для более плавного отображения графиков пришлось немного усреднить значения. Вот, собственно, и все. Жаль только, что мой газовый счетчик не имеет CAN-интерфейса...

И последнее. Для работы моего исходника требуется функции Direct IO (dio). Здесь есть небольшая сложность. Дело в том, что в версиях PHP выше 5.0.5 эти функции не поддерживаются и модули расширения в дистрибутивные пакеты не входят. Но выход есть.

Для Windows можно скачать модуль php_dio.dll и прописать в php.ini
extension=php_dio.dll

Для Linux (Debian) dio доступен через pear. Сначала устанавливаем PEAR
apt-get install php-pear
Затем устанавлиаем сам модуль
pear install channel://pecl.php.net/dio-0.0.2
Ну и прописываем в нужный php.ini
extension=dio.so

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

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

Стоит заметить, что в протоколах счетчиков Меркурий два последних байта используются для контрольной суммы CRC.
Алгоритм CRC - Modbus CRC.
Полином: 0xA001
На форуме размещены алгоритмы расчета CRC на C и PHP.

Фотографии внутренностей 3-х фазного счетчика Энергомера CE300

Автор: Andrey_B
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.



Добавить комментарий:




2012-05-04 13:49:49 | Vlad
Меркурий-221 покупать не обязательно. Сейчас есть дешевые USB-RS485/CAN и USB-IRDA адаптеры


2012-03-05 15:40:56 | Сергей
Если выскакивает ошибки при установке dio-0.0.2,ставьте 0.0.5.


2012-03-05 15:30:34 | Сергей
А,как привинтил мерк221 к линуксу?


2012-02-22 14:05:12 | Vlad
С электросчетчиками Меркурий-230, 231, 202 можно соединяться бесконтактным путем через новый вид адаптера USB-IRDA.


2012-02-15 00:33:17 | Andrey_B
Петр, не работает только эта команда или все остальные тоже?


2012-02-14 07:17:35 | Пётр
Andrey_B, не работает запрос 000550002C25, ошибка 01 (Недопустимая команда или параметр). Вы не в курсе в чём может быть причина? (Меркурий 230)


2012-01-11 17:16:11 | Роман
Спасибо, но в описании протокола для 230 не указано описание параметра "энергия на начало суток". Этот параметр используется в счетчиках ART (t- тарификатор), вероятно необходима обновленная версия.


2012-01-11 15:09:26 | YR_Spb
Добрый день!
Andrey_B подскажите а расчет за потребленную электроэнергию по 1 или 2 счетчику производится? И еще на фотографии эл.щитка интересно разведены провода 0(N) шины и земли. Можете схемку скинуть на мэйл. В феврале произвожу замену однофазного ввода на трехфазный с соответствующей переборкой щитка. Хочу поставить Энергомера CE301, т.к. он похож размерами на однофазный СОЛО (сейчас смонтирован). В связи с тем, что в статье есть ссылка на их внутренности, возможно есть какой-либо опыт использования.


2012-01-10 23:18:43 | Andrey_B
Роман, ссылка на протокол есть в конце статьи.


2012-01-10 17:47:42 | Роман
Добрый день. Со счетчика Меркурий м230ART не считывается параметр- энергия на начало суток. просьба выслать протокол на Rmemail@mail.ru


2011-12-13 11:47:28 | Andrey_B
Совсем на входе (на столбе) стоит автомат (там же счетчик для энергосбыта).
В доме вводное УЗО и счетчик уже для меня. Конечно, перед УЗО нужно всегда иметь автомат.


2011-12-13 11:31:40 | DMG
Andrey_B, у вас на входе УЗО или диф-автомат?


2011-11-15 21:03:27 | Cghfdtlkbdjcnm
Zyx, если есть интерес "пощупать" СЭБ-1ТМ через интернет то напишите мне на filiam@mail.ru, я вышлю Вам инструкцию как это можно сделать. Для этого Вам понадобится установить "Конфигуратор СЭТ" с сайта завода.


2011-11-15 10:23:21 | Zyx
Cghfdtlkbdjcnm, да по цене получается в три раза дороже, но не имеют тех недостатков, как Меркурии и Энергомеры. Так как покупка долгосрочная наверно остановлюсь на них.


2011-11-14 21:38:21 | Cghfdtlkbdjcnm
Zyx, СЭБы серии ТМ - это урезанные версии СЭТов. Эта серия счетчиков является самой передовой из современных отечественных. Версии со встроенными релюшками могут быть сконфигурироанны для защиты от перенапряжений. Имеют профиль мощности, тока, напряжения и даже (не знаю зачем, наверное для подтверждения метрологических характеристик) температуры счетчика. Протокол - аналогичен СЭТ (ну и Меркурию-230 соответственно). По сранению с остальными отечественными счетчиками супердорогие.
СЭБ-1ТМ.02Д www.nzif.ru/modules/myReviews/detailfile.php?lid=204
Есть версия СЭБов с PLC-модемом.


2011-11-13 23:22:26 | Zyx
Олег, спасибо. Хотя здесь incotex-counter.blogspot.com/2011/08/blog-post.html?showComment=1320993847892c5863979370745021026 мне ответили немного по другому.
А вообще большая высота Меркурия-206 (не помещается в стандартный шкаф) и необходимость в дополнительном питании интерфейса как-то останавливают покупку. Вот присматриваюсь к СЭБ-1TM.02Д. Кто-нить может сказать что-нить про них?


2011-11-12 21:52:04 | Andrey_B
Cghfdtlkbdjcnm, во-первых, в моей модели счетчика нет профиля мощности, поэтому опрашивать целесообразно, во-вторых, мне нужны данные в динамике абсолютно по всем показателям, а не только по потребляемой электроэнергии, в третьих, мы тут говорим об Умном Доме, системы которого должны своевременно получать информацию о проблеме с электропитанием, а не задним числом. В моей системе есть только одно место, которое накапливает и обрабатывает информацию - это сервер/контроллер/кластер, которые делают это (хранение и обработку) в том виде, в котором нужно мне, а не в каком-то там Access, а все остальные устройства только поставщики данных, но никак не больше.


2011-11-12 16:24:24 | Cghfdtlkbdjcnm
Получив же описание протокола станет понятно, насколько нецелесообразно опрашивать счетчик каждые 10 секунд. Счетчик серии ТМ ведет профиль мощности, которые может быть настроен от 1 минуты до 60 минут. Кроме того Конфигуратор этих счетчиков распространяется бесплатно, а данные опроса формируются в виде базы данных Access, которая может быть открыта и обработана из любой программы.


2011-11-12 16:16:24 | Cghfdtlkbdjcnm
Стоило бы здесь отметить, что Меркурий-230 суть СЭТ-4ТМ Нижегородского завода имени Фрунзе. Некоторые товарищи ведут нечистоплотный бизнес, но этим наказывают сами себя. Как и Меркурий-200 (в девичестве СЭБ-2А старой версии) Меркурий-230 был скопирован с "детскими болезнями", да еще, видимо, его не раз приложили головой (в плане метрологии) пока донесли до производства. В связи с этим данный счетчик настолько проблемный что все крупные организации (кроме совсем уж аффилированных) от этих счетчиков отказались.
На данный момент фирмой Инкотекс выпускаются новые типы счетчиков, отличающихся от старых как небо от земли. Тем не менее это не дает им превосходства над разработками Фрунзенцев.
Новые счетчики Нижегородского завода имени Фрунзе обладают расширенным функционалом (следует признать что зачастую избыточным), а ответы на технические вопросы по ним, как и описание протокола можно невозбранно получить просто обратившись на форум


2011-11-12 03:02:30 | Олег
Забыл! В счетчик отправляется "13 20:43:16 Mercury.exe IRP_MJ_WRITE VCP0 Length 7: 00 87 0D 62 28 B4 09".
"00 87 0D 62" - серийный номер, "28" - запрос версии ПО, "B4 09" - контрольная сумма (ответ разработчиков программного обеспечения для счетчиков Меркурий). Это если кому интересно.


2011-11-12 02:56:38 | Олег
Zyx, Меркурий 206 RN не имеет внутреннего питания (если в наименовании модели нет "S"), и соответственно используется питание 221-го (/www.incotexcom.ru/img/M221noBp.png - схема подключения). Питание на 7 и 10 клеймах. В ТП сообщили, что кабель можно использовать практически любой. Так же ТП сообщила, что в 206-х нет привычного для 3-фазных эл.счетчиков отсутствуют понятия о пользователях - имеется только серийный номер (он же сетевой адрес по-умолчания с завода). Доблестные програмеры из электросбыта (куда я отдавал на перепрограммирование в связи с отменой перехода на зимнее время) сменили на счетчике сетевой адрес. Без сетевого адреса получить доступ к счетчику невозможно (со слов ТП). Пришлось писать заявление на имя директора электросбыта, накой черт мне нужен сетевой адрес (пока ответа нет). Думаю устроят качели - зачем, а оно нужно?. Посмотрим. В любом случае - изменения параметров счетчика через интерфейс/оптопорт, заносится во внутренний журнал счетчика (60 записей), после чего можно отследить - кто верблюд!
Останется разобраться с подключением и получением сведений в Ubuntu и отправкой на сот.телефон.
В общем потренируюсь "на кошечках"
Andrey_B, я единственное не поймы, почему я получал ответ от счетчика используя старый сетевой адрес. На следующий день заменил кабель 6-й категории - ответ "Чтение версии ПО: тайм-аут ответа". Замена на прежний и другие кабели - ответ тот же.


2011-11-10 17:36:17 | Zyx
Олег, вопрос вам: ваша модификация Меркурий 206 RN имеет внутреннее питание для интерфейса или используется от 221-го?


2011-11-10 12:42:28 | Zyx
Вот здесь /incotex-counter.blogspot.com есть некоторая информация по Меркуриям.


2011-11-08 12:29:10 | Andrey_B
Олег, к сожалению ничего по делу ответить не могу. При программировании счетчика пароли меняют - это факт, а вот серийный номер вряд ли.


2011-11-06 11:43:27 | Олег
Андрей, благодарю за ответ. У меня еще один вопрос. Установил виртуальный порт.
Подключил Меркурий-221 к Меркурий-206RN по RS-485 интерфейсу витой парой FTP (20м), под управлением Windows (под Ubuntu пока не стал заводить, завелась бы на Windows) в программе Универсальный конфигуратор (с сайта Инкотекс), выбирал "Меркурий-206", RS-485/CAN, установленный порт, ввел серийный номер (8 цифр), остальные параметры вирт.порта оставил по умолчанию (чекбокс с Echo снят, на устройстве перемычка X4 снята). Так вот при выборе модели моего счетчика, деактивируются поля пользователя, пароля и HEX. При соединении (жму на кнопку) выдает "Чтение версии ПО: не совпала сумма CRC". В порт пишется
0 20:43:15 Mercury.exe IRP_MJ_CREATE VCP0 Options: Open
0 20:43:15 SUCCESS
1 20:43:15 Mercury.exe IOCTL_SERIAL_SET_TIMEOUTS VCP0 RI:25 RM:4 RC:200 WM:1 WC:100
1 20:43:15 SUCCESS
2 20:43:15 Mercury.exe IOCTL_SERIAL_GET_BAUD_RATE VCP0
2 20:43:15 SUCCESS
3 20:43:15 Mercury.exe IOCTL_SERIAL_GET_LINE_CONTROL VCP0
3 20:43:15 SUCCESS
4 20:43:15 Mercury.exe IOCTL_SERIAL_GET_S VCP0
4 20:43:15 SUCCESS
5 20:43:15 Mercury.exe IOCTL_SERIAL_GET_HANDFLOW VCP0
5 20:43:15 SUCCESS
6 20:43:15 Mercury.exe IOCTL_SERIAL_SET_BAUD_RATE VCP0 Rate: 9600
6 20:43:15 SUCCESS
7 20:43:15 Mercury.exe IOCTL_SERIAL_SET_RTS VCP0
7 20:43:15 SUCCESS
8 20:43:15 Mercury.exe IOCTL_SERIAL_SET_DTR VCP0
8 20:43:15 SUCCESS
9 20:43:15 Mercury.exe IOCTL_SERIAL_SET_LINE_CONTROL VCP0 StopBits: 1 Parity: NONE WordLength: 8
9 20:43:15 SUCCESS
10 20:43:15 Mercury.exe IOCTL_SERIAL_SET_ VCP0 EOF:0 ERR:0 BRK:0 EVT:0 XON:0 XOFF:0
10 20:43:15 SUCCESS
11 20:43:15 Mercury.exe IOCTL_SERIAL_SET_HANDFLOW VCP0 Shake:1 Replace:40 XonLimit:0 XoffLimit:0
11 20:43:15 SUCCESS
12 20:43:15 Mercury.exe IOCTL_SERIAL_PURGE VCP0 Purge: TXABORT RXABORT TXCLEAR RXCLEAR
12 20:43:15 SUCCESS
13 20:43:16 Mercury.exe IRP_MJ_WRITE VCP0 Length 7: 00 87 0D 62 28 B4 09
13 20:43:16 SUCCESS
14 20:43:16 Mercury.exe IRP_MJ_READ VCP0 Length 100
14 20:43:16 SUCCESS Length 100: 00 00 2A FF 01 00 00 32 01 00 00 FC 03 00 14 42 00 F0 00 00 40
15 20:43:16 Mercury.exe IOCTL_SERIAL_PURGE VCP0 Purge: TXABORT RXABORT TXCLEAR RXCLEAR
15 20:43:16 SUCCESS
16 20:43:16 Mercury.exe IRP_MJ_WRITE VCP0 Length 7: 00 87 0D 62 28 B4 09
16 20:43:16 SUCCESS
17 20:43:16 Mercury.exe IRP_MJ_READ VCP0 Length 100
17 20:43:16 SUCCESS Length 100: 00 00 E0 00 00 00 01 00 A8 01 00 F5 00 00 2A FF 00 00 40 01 00
18 20:43:17 Mercury.exe IOCTL_SERIAL_PURGE VCP0 Purge: TXABORT RXABORT TXCLEAR RXCLEAR
18 20:43:17 SUCCESS
19 20:43:17 Mercury.exe IRP_MJ_WRITE VCP0 Length 7: 00 87 0D 62 28 B4 09
19 20:43:17 SUCCESS
20 20:43:17 Mercury.exe IRP_MJ_READ VCP0 Length 100
20 20:43:17 SUCCESS Length 100: C0 00 00 04 37 00 00 F8 02 00 50 00 00 C0 0F 00 B1 00 00 B7 01
21 20:43:17 Mercury.exe IOCTL_SERIAL_PURGE VCP0 Purge: TXABORT RXABORT TXCLEAR RXCLEAR
21 20:43:17 SUCCESS
22 20:44:10 Mercury.exe IRP_MJ_CLEANUP VCP0
22 20:44:10 SUCCESS
23 20:44:10 Mercury.exe IRP_MJ_CLOSE VCP0
23 20:44:10 SUCCESS
Отправляет в порт "00 87 0D 62" - серийный номер, "28 B4 09" - хз?
Из порта читаются разные значения. Возможен-ли вариант - пароли/серийный номер были сменены в ремонтном участке КЭС (тогда мозг выносить ремонтникам КЭС, пользователь Admin для инженерной настройки счетчика, тарифы и т.п., а User для потребителя, только чтение значений счетчика), куда отдавал на перепрограммирование в связи с отменой перехода на зимнее время? Либо это глюк конфигуратора? Еще раз спасибо.


2011-11-05 22:15:57 | Andrey_B
Олег, думаю на коротких расстояниях (до 100 метров) подойдет точно. Что касается более длинных сегментов, нужно, наверное, отправить запрос производителю.


2011-11-05 15:51:00 | Олег
Подскажите, подойдет ли витая пара (FTP/UTP, экранированный/не экранированный) для соединения/связи Меркурий-221 и Меркурий-206RN по RS-485 интерфейсу. КИПЭ 2х06 покупать дорого. Заранее благодарен.


2011-10-09 13:43:53 | LA
А есть ли счетчики, которые удаленно смогут передать информацию об энергопотреблении? (через wifi или какой-нить другой радиоканал?)


2011-08-10 20:17:02 | bdxprns
С проблемой разобрался. Установка проходит успешно при замене dio-0.0.2 на dio-0.0.4RC4.tgz

то есть пишем pear install channel:/pecl.php.net/dio-0.0.4RC4.tgz

( + /pecl.php.net/package/dio )


2011-08-10 18:20:21 | bdxprns
при попытке выполнить команду sudo pear install channel:/pecl.php.net/dio-0.0.2

выходит ошибка
читал много в гугле и яндексе - ответа не нашел. -(


downloading dio-0.0.2.tgz ...
Starting to download dio-0.0.2.tgz (5,709 bytes)
.....done: 5,709 bytes
3 source files, building
running: phpize
Cannot find config.m4.
Make sure that you run '/usr/bin/phpize' in the top level source directory of the module

ERROR: `phpize' failed


2011-07-11 13:10:26 | Алексей
Господа, а кто-нибудь пробовал "подцепиться" к меркурию 230 через gsm модем например MC52i-485GI ?


2011-05-19 15:24:08 | THK
В скором времени планирую выложить здесь (пока есть некоторые непонятки по инициализации соединения со счетчиком). Если очень срочно и Вы готовы воспользоваться непроверенной информацией пишите: bogovic ЗВЕРЮГА bk.ru


2011-05-19 13:35:08 | VD
Есть ли у кого протокол обмена со счетчиком Меркурий-200.02.(R)? Скиньте, пожалуйста: vvvv680@yandex.ru


2011-05-10 10:21:53 | Andrey_B
Spawn, как подключите, черкните пару строчек. Под счетчики Энергомера есть открытые протоколы для UNIX? Если ваш домашний сервер выполняет какие-нибудь интересные задачи, то было бы тоже интересно почитать.


2011-05-10 07:49:01 | Spawn
Взял себе Энергомера С-102 для этих же функций, руки не доходят прикрутить к домашнему FreeBSD серверу :)


2011-04-07 10:48:38 | Али
Сергей, я тоже смотрел этот вариант, но как понимаю там вы только сможете прочиатть только количество импульсов, то есть потребленную энергию... А как узнать напряжение на каждой фазе например?


2011-04-06 23:25:06 | Сергей
А никто не пробовал взять счетчики ABB DELTAmax с IP'шным адаптером, который читает данные из ИК-порта и дает к ним доступ по IP? Там в нем даже web-сервер есть.


2011-03-28 09:45:05 | vlad
Господа на большинство ваших вопросов давно уже есть ответы на блоге разработчиков ПО для Меркуриев.


2011-03-11 15:09:13 | Andrey_B
Dmitry, этот скрипт отлично работает у меня на Linux Debian. Только вы, видимо, не дочитали статью до конца. Набор функций DIO по умолчанию не доступен в новых версиях PHP. Необходимо установить его через PEAR. Прочитайте внимательно статью, там указано как это сделать.
Есть и другой вариант. Можно заменить DIO на стандартные fopen(), fread(), fwrite(), fclose(). Сделать это несложно и займет 2 минуты, но эти функции не позволяют производить установку параметров COM-порта. Поэтому перед вызовом скрипта необходимо будет любым способом (а в Linux их несколько, например, setserial) произвести установку скорости порта. Ничего сложного.


2011-03-11 12:59:15 | Dmitriy
Доброго Вам времени суток уважаемые. Прошу ответить, использовал ли кто-нибудь данный скрипт на машине с Debian Squeeze c PHP 5.2. - пока у меня скрипт благополучно останавливается на пункте $result = dio_read($fd, 15);
Если есть возможность выложите точный скрипт под linux.


2011-03-01 12:19:11 | Andrey_B
Роман, конечно, достаточно. Никакого дополнительного драйвера не нужно.


2011-03-01 11:43:38 | Роман
Вы не подскажете в linux при подключении Меркурий 221 появляется устройство /dev/ttyUSB0 этого достаточно или еще нужен специальный драйвер?


2011-02-26 14:04:03 | Сергей
Для одной точки учёта можно использовать OPC-сервер счетчика Меркурий 230.
Прога бесплатно работает с одним счетчиком.


2010-11-17 23:09:00 | Andrey_B
Виталий, нет, я не собираюсь переводить систему Умный дом на ОС Windows. Я считаю, что архитектура UNIX-систем более удобна для конструирования систем автоматизации такого рода, бесплатна, открыта, легче управляется удаленными средствами, предоставляет больше возможностей.
Те кусочки кода, о которых вы упомянули, говорят только о том, что изначально программа писалась для Windows, так как родное ПО (например для счетчика или котла) разрабатывалось для Win32 и было легче анализировать протокол и делать аналог на одном компьютере. После портирования программ на Linux, Windows стал не нужен.


2010-11-17 14:38:10 | Виталий
Большая благодарность за столь интересные и позновательные статьи, много чего для себя узнал нового! В Ваших статьях я заметил что некоторых скриптах в коментариях написано для Windows, вы пытаетесь перевести всой "умный дом" на Windows?


2010-09-08 15:27:37 | Maxx
А где можно найти протоколы обмена других счетчиков Меркурий? Например 203,205?


2010-08-24 21:15:05 | lvorobjeff
Не плохо бы дать примерчик данной статьи на Delphi 2009/2010 на компоненте AsyncPro.
Заранее благодарю!


2010-08-23 13:37:15 | Maxim
Контрольная сумма считается, также как в протоколе ModBus. Для неё используется стандартный полином. Вот тут есть пример
upload.caxapa.ru/standards/Modbus_over_serial_line_V1.pdf


2010-08-12 13:24:38 | Maxx
Я так понял что 2 последних байта это контрольная сумма, но как она считается не могу понять, в описании протокола об этом тож ни слова, Может кто подскажет....


2010-07-26 17:29:01 | Владимир
Не могу понять, что за ахенея этот Меркурий 230. Пробовал поменять тарифы (по работе надо). Вводил 111111, 222222-хрен с маслом. Пишет неправильный код. Задолбал. КТО ЗНАЕТ В ЧЕМ ПРИЧИНА


2010-07-20 14:18:57 | j2
Для тех кто интересуется темами "Умный дом" и как считать данные со своего электронного счетчика типа Меркурий, появился новый универсальный конфигуратор с поддержкой нескольких типов интерфейсов связи (RS485, CAN, IRDA, оптопорт, USB-RF, GSM-модем, GSM-шлюз, TCP/IP), позволяет считывать и конфигурировать счетчики электрической энергии (Меркурий-200, 201, 203, 230, 231, 233).

dl.dropbox.com/u/3467322/RSS/Konfigurator/konfigurator.zip


2010-05-26 13:52:34 | harus
Vadim, Огромная просьба выслать на ttomak@mail.ru описание протокола Меркурий. Заранее спасибо!


2010-05-24 13:01:44 | Andrey_B
Руслан, простейший исходный код для работы со счетчиками Меркурий приведет в данной статье. Достаточно лишь немного поработать головой, чтобы код можно было представить в дипломной работе. Это ведь, насколько я понимаю, не домашнее задание, а дипломная работа. Без минимальных телодвижений такие вещи не делаются.


2010-05-20 22:29:36 | Руслан
делаю дипломную работу на тему разработка автоматизированной системы учета электроэнергии,нужен исходный код программы который будет отображать данные с счетчиков на монитор, с описанием,на чем пишется программа не имеет значение,есть какие нибудь предложения? связь ross31@mail.ru,89503289397,как можно с тобой связаться?


2010-04-20 10:41:53 | Алексей Ч.
в инкотексе мне заявили следующее:
интерфейс CAN является ни чем иным, как RS485 с перепутанной полярностью. у меня лежит меркурий ART-1 без сложного кода модификации (видимо старая версия) 2004г. он спокойно опрашивается черех МОХ-у по 485 интерфейсу, просто с перепутанной полярностью. но вот с другими меркуриями этот фокус почему-то не проходит. = да и вообще где бы нарыть документашки именно на эти старые муркурии. везде только инфа для меркуриев со сложным модификационным кодом. имеется так же меркурий ART и меркурий ART-02 PQCSIN (оба не пашут через моху)

Что касается расшифровки трехбайтных значений мощности, то собственно числовое значение содержится только во втором и третьем байтах из трех, а весь первый байт содержит бит=1, указывающий положительное для напряжения (0бит), тока (1бит), активной(2 бит), реактивной(3бит) и полной(4й бит) мощности, коэффициента мощности(5й бит), частоты(6й бит) и угла между фазными напряжениями(7й бит).


2010-04-14 09:26:40 | velikan
люди! почти полностью разобрался с 230-м. помогите если кто знает про старший и младший байты адреса пожалуйста. velikan080@mail.ru


2010-03-21 00:00:00 | Andrey_B
Сергей, что вы понимаете под "перекосом фаз"?


2010-03-20 16:47:13 | сергей
Почему у вас такой перекос фаз на трендах?


2010-03-10 15:39:12 | илья
добрый день.попрошу вас о небольшои услуге)))немогли бы вы прислать мне формулы расчета технических потерь из первичнои стороны во вторичную в программе конфигуратор меркурий 230.а так же формулы расчета мощьности потерь в самом счетчике меркурий 230.kolhozzznik@inbox.ru


2010-02-18 12:30:50 | Андрей
Доброго времени суток. Вышлите пожалуйста мне протокол обмена с Меркурием 230 АР-03 на an_keks@mail.ru. Заранее спасибо.


2010-02-03 21:16:29 | Alex122
Добрый вечер. Вышлите пожалуйста мне протокол обмена с Меркурием 230 ART02(03), если не сложно подскажите как правильно обращаться к конкретному счетчику,если на проводе их с десяток. Заранее благодарен.


2009-12-11 06:43:26 | Александр
Добрый день. Вышлите пожалуйста мне протокол обмена с Меркурием 230, если не сложно. Заранее благодарен. ppprem@mail.ru


2009-12-10 21:28:10 | DMG
Родной адаптер CAN <-> RS232 построен на MAX233ACWP(/www.chip-dip.ru/product0/148716696.aspx) и PCA82C250T(/www.chip-dip.ru/product0/513330198.aspx) плюс пара резистров(120ом и 27кОм) и пара конденсаторов(0.1мкф). При желании все можно собрать в корпусе разъема DB9.


2009-12-07 21:32:35 | Иван
подскажите пожалуйста пароль доступа в программе конфигуратор для конфигурации и инициализации счетчиков меркурий 230! если кто знает подскажите!!! moto-48rus@mail.ru


2009-12-04 12:03:55 | Александр
Добрый день. Вышлите пожалуйста мне протокол обмена с Меркурием 230, если не сложно. Заранее благодарен. topchieff@yandexl.ru


2009-11-28 21:52:56 | Vladimir
Подключал Меркурий-230 через преобразователь MOXA - A53 (RS-485 - RS232). Работает.


2009-11-24 12:49:11 | Mike
Вот что есть для работы с серийным портом в РНР:
/blogs.vinuthomas.com/2007/04/09/php-and-serial-ports/
Direct IO не нужно


2009-11-22 11:51:45 | Владимир
Не могу подключиться к Меркурий230 через родной адаптер. Интерфейс CAN. В чем может быть тонкость?


2009-11-20 12:13:39 | dmitrydmitry
Угу, похоже, что это именно оно и есть. Только сделав минус $40 задушится только второй байт. Хотя я не уверен, что первый когда-либо появляется. :-) Это из серии про монашку и огурец :-)

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


2009-11-20 00:11:45 | Andrey_B
А я с этим сталкивался. Правда описания протокола у меня на тот момент не было никакого. Поэтому я не знал почему это происходит. Но посмотрите в код программы. Вот, например, кусок.
if ( dechex(ord($result[7])) >= 40 )
$result[7] = chr(dechex(ord($result[7])) - 40);
Это, если я правильно вас понимаю, оно и есть. Теперь понятно. А я ломал голову зачем это надо ;)


2009-11-19 18:31:19 | dmitrydmitry
Я занудо! Но с моментальной мощностью не все так просто. Я сейчас долбаю тестовый вариант. Меркурий 230, одна фаза подключена, примотана одна розетка, куда воткнут комп, ну и чайник иногда :-) 37 - код моего счетчика
Ответы на запрос моментальной мощности (нагрузка ~48 вт и ~750 вт). Вот:
37 08 16 00 81 F2 37 [40 6B 14] 40 6B 14 00 00 00 00 00 00 F1 5F
37 08 16 00 81 F2 37 [41 4F 28] 41 4F 28 00 00 00 00 00 00 80 D4

Если 40 14 6B или 41 28 4F перевести из 16-тиричной системы, то получаем шнягу. Внимательное разглядывание протокола указало, что 2 первый бита при чтении мощности указывают на направление реактивной и активной нагрузки. Правда, к запросу 16h вроде как они не должны относиться, но тут либо писателю не писалось, либо читатель читает не все :-) Короче "and 3F" над первым байтом творят чудеса :-) Вам оно тоже не помешает, вдруг и в Вашей розетке реактивная мощность в другую сторону побежит.


2009-11-19 11:36:11 | dmitrydmitry
Ааааа... :-) Скобка опять не там стоит. Общая моментальная мощность P тоже в 3-х байтах приходит, а не в 4-х :-) Пардон, если задолбал :-)


2009-11-18 19:40:17 | Andrey_B
Дмитрий, Вы совершенно правы. Спасибо за указанные ошибки в описании протокола. В опубликованном же исходнике все правильно - берутся в расчет все 3 байта. ;)


2009-11-18 19:33:19 | dmitrydmitry
Андрей, чтоб довести описание до идеального блеска, надо отметить, что первым байтом идет номер счетчика, который равен 2-м последним цифрам его серийного номера (если его не поменяли). Либо в стандартной софтине (параметры счетчика -> параметры и установка). Он там будет виден и пропишется вверху.

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

Я предполагаю, что Вы это знаете и без меня, но вдруг :-)


2009-11-18 16:46:41 | dmitrydmitry
В предыдущем комментарии отъехали решетки, поэтому немного смазалось. Речь шла о "Мощность P (Вт) по фазам"


2009-11-18 16:41:56 | dmitrydmitry
Огромное спасибо за описание на человеческом языке. Делаю мониторинг, чтобы видеть ситуацию по 4-м счетчикам сразу же. Косит напругу сильно. Хотелось бы, чтобы Вы устранили небольшие неточности. Ищем "8,7,9,10." Надо исправить на ""8,7,10,9"

Вот тут:"000816008F8600[03D6A9]00[364F]00[06B6]02[9AA4]3E60" Квадратные скобки надо ставить вокруг 3-х байт во всех случаях. Так говорит протокол и здравый смысл. 4F36+B606+A49A это не 03A9D6, а вот 4F36+B606+02A49A тоже не совсем то, но уже около того :-)

P.s. Еще раз огромное спасибо.


2009-11-09 12:57:57 | Андрей
Есть Меркурий 230 с CAN-интерфейсом и ADAMовский преобразователь 232-485. Помогите подключиться ?


2009-11-05 10:11:44 | Антон
Вышлите пожалуйста протокол обмена, очень нужен :( shortton85@mail.ru
Буду безмерно благодарен :)


2009-11-05 08:09:02 | Александр
Vadim, вышлите пожалуйста протокол обмена со счетчиком Меркурий 230 на konalex@mail.ru Спасибо.


2009-10-29 05:34:53 | gdr
Vadim, вышлите пожалуйста протокол обмена со счетчиком Меркурий 230 на goga46_gav_mail.ru Спасибо.


2009-10-27 14:28:44 | vadim
www.homea.ru/blog/alid/index_b-3.html
Вот новенькое по опросу счетчиков Mercury-230


2009-10-21 16:52:34 | Анатолий
Vadim, вышлите пожалуйста протокол обмена со счетчиком Меркурий 230 на disystem@bk.ru Заранее спасибо!


2009-10-20 15:14:43 | Антон
Vadim, Огромная просьба выслать на Lex-Mark@mail.ru описание протокола Меркурий. Заранее спасибо!


2009-10-07 10:21:49 | Анатолий
Vadim.помогите сбросить забытый пароль Меркурий 230.Спасибо.milcin@bk.ru


2009-10-04 03:52:28 | Bit
Vadim, вышлите пожалуйста протокол обмена со счетчиком Меркурий 230 на va@mail.ru Буду бесконечно благодарен!


2009-09-29 01:33:33 | Александр Минаев
Добрый день. Вышлите пожалуйста мне протокол обмена с Меркурием 230, если не сложно. Заранее благодарен. am-ts230@mail.ru


2009-09-28 14:09:54 | ROman
Vadim, вышлите пожалуйста протокол обмена со счетчиком Меркурий 230 на rermakov@mail.ru Спасибо!


2009-09-14 13:24:33 | Vadim
Если нужен протокол обмена с Меркурием могу скинуть.


2009-08-24 23:47:03 | kir
Подскажите как поменять тарифное время если не трудно опишите зарание спасибо hodyachiy88@mail.ru


2009-08-11 14:48:09 | Merk230
Уважаемый Sergei! Не могли бы Вы выслать мне описание протокола для Меркурия 230. Мне нужно. На мыло 1965@list.ru


2009-07-14 22:07:28 | Sergei
AC-4 ОВЕН работает как раз со счетчиком Меркурий 230 с CAN-интерфейсом. Подключал еще преобразователь RS232->RS485 он также работает.
CAN это тот же RS485, но только с жесткой перемычкой c Tx на Rx ( именно поэтому идет эхо - которое Вы видели, когда снифферили ) и немного другой выходной логикой.
По стандарту CAN 9 вольтовый, но 5 вольтовый AC-4 с ним работает без проблем.
Вообще, когда говорят про CAN в большинстве случаев имеют в виду именно протокол, а не физический уровень. Сам протокол довольно сложный, многие микроконтроллеры имеют аппаратную поддержку протокола.
Инкотекс же поставил лишь драйвер CAN который подключил к UART микроконтроллера, протокол сделал свой.


2009-07-14 16:24:31 | Andrey_B
Сергей, очень важное замечание насчет того, что необязательно покупать родной адаптер. Но, насколько я понимаю, преобразователь АС-4 от ОВЕН будет работать только с теми счетчиками которые имеют интерфейс RS-485. С интерфейсом CAN этот преобразователь, по всей видимости, работать не будет. Так ли это?


2009-07-14 10:01:04 | Sergei
Кстати для счетчиков Меркурий можно использовать практически любой преобразователь RS485->USB/RS232. Использую преобразователь AC-4 от ОВЕН. Прекрасно работает.


2009-07-14 09:46:31 | Sergei
Тоже ковыряюсь сейчас с Меркурием. Статья помогла, т.к. не мог понять что за формат данных - толи урезанный флоат, то ли еще что-то. А они просто жестко привязали запятую.
Если кому нужно, то имею на руках краткое описание протокола для Меркурия 230.


2009-06-17 22:24:44 | Andrey_B
В нашем колхозе о многотарифном учете и не слыхивали... ;)
Перепрограммирование теоретически возможно родной программой "КОНФИГУРАТОР". Только нужно обязательно делать это на втором уровне доступа с паролем по умолчанию "222222". (Пароль по умолчанию для первого уровня соответственно "111111")


2009-06-17 19:44:10 | razer
Спасибо. Думаю, мне не опломбируют с подключенным кабелем. Ведь что мешает потом перепрограммировать время смены тарифов, получив приличную экономию ))


2009-06-15 12:42:10 | Andrey_B
Счетчики Меркурий бывают с разными интерфейсами (обозначается латинской буквой в названии модели): C (CAN), R (RS485), I (Infrared), L (PLC-modem), G (GSM). Преобразователь Меркурий-221 можно использовать как для счетчиков с CAN-интерфесом, так и для счетчиков с RS-485 интерфейсом (у него две клеммные группы). А если речь идет о преобразователе RS485-RS232 от стороннего производителя (не от фирмы Инкотекс), то, думаю, со счетчиками, оснащенными CAN-интерфейсом использовать его нельзя точно. Да и со счетчиками для RS485 скорее всего тоже. Некоторые источники, например, утверждают, что CAN там ненастоящий, а сильно урезанный, возможно, не совсем стандартный.


2009-06-13 20:49:57 | razer
А RS485-to-RS232 конвертор можно использовать? Вообще не могу найти схем адапторов для работы с CAN через com порт. Готовые решения слишком небюджетны.