Страница 6 из 12
Re: [Модуль] Счетчики Меркурий (mercury)
Добавлено: Чт ноя 08, 2018 6:42 am
directman66
Такой вариант (напрямую с com-портом) не предусматривался, конвертируйте его в tcp с помощью ser2net и обращайте по ip адресу.
Re: [Модуль] Счетчики Меркурий (mercury)
Добавлено: Чт ноя 08, 2018 10:40 am
Fav0rit
Не знаю правильно ли у всех отображается мощность, если правильно, то я удивлен, потому что значения мгновенной мощности у меня не сходились даже близко и я понял где ошибка.
Вот пример обмена данными со счетчиком:
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) показано схематично.
Если получится исправить расчет в модуле - пришлю результат.
Re: [Модуль] Счетчики Меркурий (mercury)
Добавлено: Чт ноя 08, 2018 3:35 pm
Fav0rit
Исправленная функция.
В гитхабе отправил...
Код: Выделить всё
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;
}
Re: [Модуль] Счетчики Меркурий (mercury)
Добавлено: Чт ноя 08, 2018 5:34 pm
stellhawk
Спасибо, днем уже сам понял.
а есть пример настройки 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 нормально работает.
Re: [Модуль] Счетчики Меркурий (mercury)
Добавлено: Пт ноя 09, 2018 7:19 am
directman66
Fav0rit писал(а): Чт ноя 08, 2018 3:35 pm
Исправленная функция.
В гитхабе отправил...
Спасибо принял. Не было возможности самому заняться.
Re: [Модуль] Счетчики Меркурий (mercury)
Добавлено: Пт ноя 09, 2018 7:23 am
directman66
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"
Re: [Модуль] Счетчики Меркурий (mercury)
Добавлено: Пт ноя 09, 2018 9:42 am
Fav0rit
directman66 писал(а): Пт ноя 09, 2018 7:19 am
Fav0rit писал(а): Чт ноя 08, 2018 3:35 pm
Исправленная функция.
В гитхабе отправил...
Спасибо принял. Не было возможности самому заняться.
Нет проблем, главное, чтобы мой код правильно работал, потому что там не самый красивый подход да и программист из меня так себе...
Re: [Модуль] Счетчики Меркурий (mercury)
Добавлено: Пт ноя 09, 2018 9:49 am
directman66
Просьба отписаться, кто пользуется модулем, каков результат. К сожалению, у меня нет оборудования меркурий для тестирования.
Re: [Модуль] Счетчики Меркурий (mercury)
Добавлено: Пт ноя 09, 2018 12:34 pm
stellhawk
к сожалению пока никак. не могу пробиться через ser2net что-то с настройками не так, а что пока не знаю.
Re: [Модуль] Счетчики Меркурий (mercury)
Добавлено: Пт ноя 09, 2018 6:10 pm
ученик
Может настройки с моего аппарата помогут?
Мои настройки Ser2net
только скорость 9600, а не как на скриншоте.
конфигуратор меркурия общается со счетчиком через ser2net.