[Модуль] Счетчики Меркурий (mercury)

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: [Модуль] Счетчики Меркурий (mercury)

Сообщение directman66 » Чт ноя 08, 2018 6:42 am

Такой вариант (напрямую с com-портом) не предусматривался, конвертируйте его в tcp с помощью ser2net и обращайте по ip адресу.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Fav0rit
Сообщения: 60
Зарегистрирован: Чт мар 19, 2015 10:27 pm
Благодарил (а): 8 раз
Поблагодарили: 22 раза

Re: [Модуль] Счетчики Меркурий (mercury)

Сообщение Fav0rit » Чт ноя 08, 2018 10:40 am

Не знаю правильно ли у всех отображается мощность, если правильно, то я удивлен, потому что значения мгновенной мощности у меня не сходились даже близко и я понял где ошибка.
Вот пример обмена данными со счетчиком:
send:32081600813E (запрос на получение значений мгновенной мощности)
answ:32 c1325d c1325d 000000 000000 8e45 (ответ: адрес PvT Pv1 Pv2 Pv3 CRC)

Так вот, в ответе мгновенной мощности c1 32 5d два старших разряда старшего байта указывают положение вектора
полной мощности и все байты читаются в порядке 1 3 2, то есть c1 5d 32, причем два старших бита этого числа мы должны отбросить, а полученное число разделить на 100.
c15d32 =
110000010101110100110010
000000010101110100110010 -> 89394/100 = 893.94 Вт

Описание протокола: http://www.incotexcom.ru/doc/M23x%20236 ... .12.11.pdf
На странице 44 сказано про старшие биты, на странице 53 (рисунок 36) показано схематично.

Если получится исправить расчет в модуле - пришлю результат.
Fav0rit
Сообщения: 60
Зарегистрирован: Чт мар 19, 2015 10:27 pm
Благодарил (а): 8 раз
Поблагодарили: 22 раза

Re: [Модуль] Счетчики Меркурий (mercury)

Сообщение Fav0rit » Чт ноя 08, 2018 3:35 pm

Исправленная функция.
В гитхабе отправил...

Код: Выделить всё

function merc_gd($socket252, $cmd, $factor = 1, $total = 0)
{
$this->send($socket252, $cmd);
$result =$this->read($socket252);

	$ret = array();
	
	$start_byte = 1;
	
	if ( $total != 1 )
	{
		for ( $i = 0; $i < 4; $i++ )
		{
         	//if ( dechex(ord($result[$start_byte + $i * 3])) >= 40 )
			//$result[$start_byte + $i * 3] = chr(dechex(ord($result[$start_byte + $i * 3])) - 40);
			if ( strlen($result) > $start_byte + 2 + $i * 3 )
				// Для всех запросов кроме мощности используем стандартный рассчет
				if (substr($cmd,2,6)!='081600') {
					$ret[$i] = hexdec($this->dd($result[$start_byte + $i * 3]).$this->dd($result[$start_byte + $i * 3 + 2]).$this->dd($result[$start_byte + $i * 3 + 1]))*$factor;
				}
				// При запросе мощности нужно маскировать два старших разряда старшего бита
				else {
					$hex = $this->dd($result[$start_byte + $i * 3]).$this->dd($result[$start_byte + $i * 3 + 2]).$this->dd($result[$start_byte + $i * 3 + 1]);
					$bin=base_convert($hex, 16, 2);
					// Обрезаем строку до 22 бит
					while (strlen($bin)>22) $bin=substr($bin,1);
					$ret[$i] = bindec($bin)*$factor;
				}
		}
	}
	else
		$ret[0] = hexdec($this->dd($result[$start_byte+1]).$this->dd($result[$start_byte]).$this->dd($result[$start_byte+3]).$this->dd($result[$start_byte+2]))*$factor;
	return $ret;
}
stellhawk
Сообщения: 264
Зарегистрирован: Чт ноя 08, 2018 5:51 am
Благодарил (а): 10 раз
Поблагодарили: 83 раза

Re: [Модуль] Счетчики Меркурий (mercury)

Сообщение stellhawk » Чт ноя 08, 2018 5:34 pm

Спасибо, днем уже сам понял.
а есть пример настройки ser2net?
пробовал разные варианты, но всё что-то не то.
пробовал вот такие например, но с них ответ неадекватный на команды
1884:telnet:0:/dev/ttyUSB0:9600
1883:telnet:0:/dev/ttyUSB0:9600 NONE 2STOPBITS 8DATABITS -XONXOFF -RTSCTS LOCAL
на выходе
send:01010101010101013D7A
answ:
send:0805C673
answ:fffb03fffb01fffe01fffd00
send:08000670
answ:
send:08034671
answ:
send:080287B1
answ:
send:0102020202020202FAFC
answ:
send:0818067A
answ:
Причем ответ всегда такой шлю тестовую посылку:
send:001B07B30<br>answ:fffb03fffb01fffe01fffd00<br>
всё равно такой же ответ.
через утилиту mercury236 напрямую с /dev/ttyUSB0 нормально работает.
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: [Модуль] Счетчики Меркурий (mercury)

Сообщение directman66 » Пт ноя 09, 2018 7:19 am

Fav0rit писал(а):
Чт ноя 08, 2018 3:35 pm
Исправленная функция.
В гитхабе отправил...
Спасибо принял. Не было возможности самому заняться.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: [Модуль] Счетчики Меркурий (mercury)

Сообщение directman66 » Пт ноя 09, 2018 7:23 am

stellhawk писал(а):
Чт ноя 08, 2018 5:34 pm
Спасибо, днем уже сам понял.
а есть пример настройки ser2net?
пробовал разные варианты, но всё что-то не то.
пробовал вот такие например, но с них ответ неадекватный на команды
1884:telnet:0:/dev/ttyUSB0:9600
1883:telnet:0:/dev/ttyUSB0:9600 NONE 2STOPBITS 8DATABITS -XONXOFF -RTSCTS LOCAL
у меня запускается через скрипт командой

Код: Выделить всё

ser2net -C "3004:raw:60:/dev/ttyUSB0:9600 NONE 1STOPBIT 8DATABITS -XONXOFF -LOCAL -RTSCTS"
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Fav0rit
Сообщения: 60
Зарегистрирован: Чт мар 19, 2015 10:27 pm
Благодарил (а): 8 раз
Поблагодарили: 22 раза

Re: [Модуль] Счетчики Меркурий (mercury)

Сообщение Fav0rit » Пт ноя 09, 2018 9:42 am

directman66 писал(а):
Пт ноя 09, 2018 7:19 am
Fav0rit писал(а):
Чт ноя 08, 2018 3:35 pm
Исправленная функция.
В гитхабе отправил...
Спасибо принял. Не было возможности самому заняться.
Нет проблем, главное, чтобы мой код правильно работал, потому что там не самый красивый подход да и программист из меня так себе...
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: [Модуль] Счетчики Меркурий (mercury)

Сообщение directman66 » Пт ноя 09, 2018 9:49 am

Просьба отписаться, кто пользуется модулем, каков результат. К сожалению, у меня нет оборудования меркурий для тестирования.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
stellhawk
Сообщения: 264
Зарегистрирован: Чт ноя 08, 2018 5:51 am
Благодарил (а): 10 раз
Поблагодарили: 83 раза

Re: [Модуль] Счетчики Меркурий (mercury)

Сообщение stellhawk » Пт ноя 09, 2018 12:34 pm

к сожалению пока никак. не могу пробиться через ser2net что-то с настройками не так, а что пока не знаю.
ученик
Сообщения: 230
Зарегистрирован: Чт фев 12, 2015 2:34 pm
Благодарил (а): 36 раз
Поблагодарили: 6 раз

Re: [Модуль] Счетчики Меркурий (mercury)

Сообщение ученик » Пт ноя 09, 2018 6:10 pm

Может настройки с моего аппарата помогут?
Мои настройки Ser2net
только скорость 9600, а не как на скриншоте.
конфигуратор меркурия общается со счетчиком через ser2net.
Вложения
ser2net.jpg
ser2net.jpg (74.52 КБ) 3658 просмотров
server i5, OS-Ubuntu Server 16., 1-wire
php 7, AMS,broadlink rm2,rm3 mini.
Ответить