Пульсар модуль счетчика воды v6

Свежедобавленный в R24 “Пульсар модуль счетчика воды v6” при опросе выдаёт ошибку.
Ещё проблема в том, что драйвер ставит адрес Модбас равный серийному номеру счетчика, и не даёт изменять. Но адрес Модбас в приборах перепрограммируемый, в моём случае серийный номер 00443130, а адрес я сделал 88443130, так как в сети есть прибор, который 00 в адресе считает широковещательным запросом, и начинает конфликтовать с Пульсаром.
dump.20113_iRZ_TC65Smart(1).2017-12-01.log (1.1 KB)
Журнал опроса.xls (20.5 KB)

Дело в том, что драйвер не может устанавливать адрес Modbus равный серийному номеру счетчика, поскольку драйвер устройства вообще работает не по протоколу Modbus.
Драйвер устройства работает по протоколу производителя Тепловодохран, согласно которому адресация приборов производится по серийному номеру.

Возможно ваша проблема в том, что конкретно ваш прибор работает по протоколу Modbus. В таком случае вы не сможете опросить свой прибор в ЛЭРС УЧЕТ текущим драйвером.

Счетчик работает по протоколу производителя Тепловодохран. Программа TestAll позволяет изменить сетевой адрес, что и было сделано. После этого показания легко снимаются с помощью TestAll, а вот ЛЭРС выдаёт ошибку.
v6.png

ЛЭРС УЧЕТ выдает ошибку, поскольку прибор возвращает данные не корректно.
Пример запроса к устройству и ответа устройства:
2017-12-01 14:08:31.7951 >> 88 44 31 30 03 02 46 00 01 49 AB - запрос
2017-12-01 14:08:33.5449 << 38 88 44 31 30 03 02 29 01 76 - ответ

Пример запроса к устройству и ответа программы TestAll из вашего скриншота:
88 44 31 30 03 02 46 00 01 49 AB - запрос
88 44 31 30 03 02 29 01 76 38 - ответ

Как вы идите из дампов, запрос к прибору из ЛЭРС УЧЕТ и запрос программы TestAll абсолютно одинаковые.
Проблема заключается в ответе устройства. Когда драйвер ЛЭРС УЧЕТ выполняет запрос, то в начале ответа устройства содержится лишний байт 38 и в конце ответа устройства не хватает последнего байта с контрольной суммой.

Сегодня, по непонятной причине, счетчик начал успешно опрашиваться :ne_vi_del:

Возможно проблема была в коммуникационном оборудовании, поскольку ответ от прибора возвращался искаженным.

Проблема никуда не делась, теперь ответ приходит со сдвигом на четыре байта, и ЛЭРС его не понимает.
2017-12-04 13:34:53.4994 ----- Порт открыт -----
2017-12-04 13:34:53.5151 >> 88 44 31 30 03 02 46 00 01 49 AB
2017-12-04 13:34:54.4056 << 03 02 29 01 76 38 88 44 31 30
2017-12-04 13:34:54.4056 >> 88 44 31 30 03 02 46 00 01 49 AB
2017-12-04 13:34:54.7649 << 03 02 29 01 76 38 88 44 31 30
2017-12-04 13:34:54.7649 >> 88 44 31 30 03 02 46 00 01 49 AB
2017-12-04 13:34:55.1399 << 03 02 29 01 76 38 88 44 31 30
2017-12-04 13:34:55.1399 >> 88 44 31 30 03 02 46 00 01 49 AB
2017-12-04 13:34:55.5617 << 03 02 29 01 76 38 88 44 31 30
2017-12-04 13:34:55.5617 >> 88 44 31 30 03 02 46 00 01 49 AB
2017-12-04 13:34:55.9835 << 03 02 29 01 76 38 88 44 31 30
2017-12-04 13:34:55.9835 >> 88 44 31 30 03 02 46 00 01 49 AB
2017-12-04 13:34:56.4054 << 03 02 29 01 76 38 88 44 31 30
2017-12-04 13:34:56.4054 >> 88 44 31 30 03 02 46 00 01 49 AB
2017-12-04 13:34:56.7959 << 03 02 29 01 76 38 88 44 31 30
2017-12-04 13:34:56.7959 >> 88 44 31 30 03 02 46 00 01 49 AB
2017-12-04 13:34:57.2022 << 03 02 29 01 76 38 88 44 31 30
2017-12-04 13:34:57.2022 ----- Порт закрыт -----

Программа TestAll через тот же канал связи работает идеально:
Подключение: Тип Соединения = TCPServer; Время ожидания = 1500; Пауза перед запросом = 50; Повторные запросы = 3; Порт = 20113; Подключено
Определение сетевого адреса пульсара
Отправлено: [11 байтов]
F0 0F 0F F0 00 00 00 00 00 A5 44 …D

Получено: [10 байтов] [+00:015]
F0 0F 0F F0 88 44 31 30 8E 94 …D10…

Определение модели пульсара, сет. адр. 88443130
Отправлено: [11 байтов]
88 44 31 30 03 02 46 00 01 49 AB .D10…F…I.

Получено: [10 байтов] [+00:109]
88 44 31 30 03 02 29 01 76 38 .D10…).v8

Чтение текущих с прибора: Пульсар модуль счетчика воды v6 88443130
Чтение параметров :K1; D; NPARAM6BIT1; NPARAM6BIT2; NPARAM6BIT3; NPARAM6BIT6; NPARAM6BIT7;
Отправлено: [10 байтов]
88 44 31 30 04 0A 34 5A BE 25 .D10…4Z.%

Получено: [16 байтов] [+00:124]
88 44 31 30 04 10 11 0C 04 0D 33 1E 34 5A C4 67 .D10…3.4Z.g

Отправлено: [12 байтов]
88 44 31 30 0A 0C 06 00 0A 9C 11 37 .D10…7

Получено: [18 байтов] [+00:234]
88 44 31 30 0A 12 00 00 00 00 00 00 00 00 0A 9C AC 0D .D10…

Отправлено: [12 байтов]
88 44 31 30 0A 0C 06 00 0E 07 52 5C .D10…R
Получено: [18 байтов] [+00:234]
88 44 31 30 0A 12 00 00 00 00 00 00 00 00 0E 07 EF 66 .D10…f

Отправлено: [12 байтов]
88 44 31 30 0A 0C 06 00 C0 95 87 91 .D10…

Получено: [18 байтов] [+00:109]
88 44 31 30 0A 12 00 00 00 00 00 00 00 00 C0 95 3A AB .D10…:.

Отправлено: [12 байтов]
88 44 31 30 0A 0C 06 00 BF 3E E6 1E .D10…>…

Получено: [18 байтов] [+00:234]
88 44 31 30 0A 12 00 00 00 00 00 00 00 00 BF 3E 5B 24 .D10…>[$

Отправлено: [12 байтов]
88 44 31 30 0A 0C 06 00 44 63 64 D7 .D10…Dcd.

Получено: [18 байтов] [+00:109]
88 44 31 30 0A 12 00 00 00 00 00 00 00 00 44 63 D9 ED .D10…Dc…

Отправлено: [14 байтов]
88 44 31 30 01 0E 01 00 00 00 34 4B BB 43 .D10…4K.C

Получено: [14 байтов] [+00:234]
88 44 31 30 01 0E C3 B2 00 00 34 4B 93 BB .D10…4K…После опроса через TestAll снова заработал опрос в ЛЭРС.

А вы заводской программой опрашиваете прибор по GPRS-каналу?
Ваш прибор находится в сети? Если да, то какое оборудование находится в сети еще?

Не пытаетесь ли вы одновременно опросить прибор и программой TestAll и ЛЭРС УЧЕТ?

А вы заводской программой опрашиваете прибор по GPRS-каналу?
Да, по GPRS. Для этого отключаю порт 20113 в ЛЭРСе (меняю в настройках порта 20113 на 22113) и запускаю на сервере ЛЭРСа программу TestAll на порт 20113.
В сети ещё находится электросчётчик ПСЧ-3ТМ.05М с адресом Модбас 94. Судя по логам, он не мешает. Заметил, что если опрос Пульсара в ЛЭРСе не работает, то можно первым опросить электросчетчик, и после этого Пульсар начинает нормально опрашиваться ЛЭРСом.
Одновременно опрашивать через TestAll и ЛЭРС я никак не могу.

Прибор ПСЧ-3ТМ.05М не работает по протоколу Modbus, у приборов производителя НЗиФ свой протокол обмена. Мы не рекомендуем объединять несколько приборов, работающих на разных протоколах обмена, в одну сеть, поскольку неизвестно как они себя могут повести. Возможно искажение ответа от прибора возникает по этой причине.

Возможно, поможет небольшая задержка перед посылкой повторного запроса ЛЭРСом?

Судя по логам, все запросы и ответы от ПСЧ-3ТМ.05М начинаются с байта 5E (94), а все запросы и ответы от Пульсара с байта 88 (136). Обе заводские программы, от ПСЧ и от Пульсара, работают без проблем. Хотелось бы этого же и от ЛЭРСа :smu:sche_nie:

Попробуйте отключить ПСЧ-3ТМ.05М и опросить Пульсар. Сообщите результат опроса.
Не понятно, каким образом задержка, перед посылкой запроса, должна повлиять, если возвращается неверный ответ?

Отключить ПСЧ-3ТМ.05М и опросить Пульсар мне очень сложно, для этого придется далеко ехать. К тому же, в результате я, как и вы уверен - Пульсар станет правильно опрашиваться.
Но всё таки я убедительно вас прошу сделать драйвер Пульсара в ЛЭРС более помехоустойчивым. Что это значит? Попытаюсь объяснить.
Еще один лог обмена:
2017-12-05 12:14:47.6006 ----- Порт открыт -----
2017-12-05 12:14:47.6162 >> 88 44 31 30 03 02 46 00 01 49 AB - первый запрос от ЛЭРС к Пульсару
2017-12-05 12:14:49.6316 << FB FB - ПСЧ-3ТМ.05М зачем-то решил отправить два байта, я был не прав, что все ответы начинаются с 5E
2017-12-05 12:14:50.7878 << 88 44 31 30 03 02 29 01 - ЛЭРС ждет от Пульсара ответ из 10 байтов, поэтому контрольная сумма не верна
2017-12-05 12:14:50.7878 >> 88 44 31 30 03 02 46 00 01 49 AB - ЛЭРС без паузы повторяет запрос, и …
2017-12-05 12:14:51.7721 << 76 38 88 44 31 30 03 02 29 01 - получает ответ из двух байтов ответа на предыдущий запрос и восьми на текущий запрос. КС опять не сошлась!
2017-12-05 12:14:51.7721 >> 88 44 31 30 03 02 46 00 01 49 AB - ЛЭРС без паузы повторяет запрос, и …
2017-12-05 12:14:52.2407 << 76 38 88 44 31 30 03 02 29 01 - получает ответ из двух байтов ответа на предыдущий запрос и восьми на текущий запрос. КС опять не сошлась!
2017-12-05 12:14:52.2407 >> 88 44 31 30 03 02 46 00 01 49 AB - ЛЭРС без паузы повторяет запрос, и …
2017-12-05 12:14:52.6782 << 76 38 88 44 31 30 03 02 29 01 - получает ответ из двух байтов ответа на предыдущий запрос и восьми на текущий запрос. КС опять не сошлась!
2017-12-05 12:14:52.6782 >> 88 44 31 30 03 02 46 00 01 49 AB - ЛЭРС без паузы повторяет запрос, и …
2017-12-05 12:14:53.2094 << 76 38 88 44 31 30 03 02 29 01 - получает ответ из двух байтов ответа на предыдущий запрос и восьми на текущий запрос. КС опять не сошлась!
2017-12-05 12:14:53.2094 >> 88 44 31 30 03 02 46 00 01 49 AB - ЛЭРС без паузы повторяет запрос, и …
2017-12-05 12:14:53.5999 << 76 38 88 44 31 30 03 02 29 01 - получает ответ из двух байтов ответа на предыдущий запрос и восьми на текущий запрос. КС опять не сошлась!
2017-12-05 12:14:53.5999 >> 88 44 31 30 03 02 46 00 01 49 AB - ЛЭРС без паузы повторяет запрос, и …
2017-12-05 12:14:54.0061 << 76 38 88 44 31 30 03 02 29 01 - получает ответ из двух байтов ответа на предыдущий запрос и восьми на текущий запрос. КС опять не сошлась!
2017-12-05 12:14:54.0061 >> 88 44 31 30 03 02 46 00 01 49 AB - ЛЭРС без паузы повторяет запрос, и …
2017-12-05 12:14:54.4436 << 76 38 88 44 31 30 03 02 29 01 - получает ответ из двух байтов ответа на предыдущий запрос и восьми на текущий запрос. КС опять не сошлась!
2017-12-05 12:14:54.4436 ----- Порт закрыт -----

А вот если бы задержка перед посылкой запроса была, то выглядело бы примерно вот так:
----- Порт открыт -----

 88 44 31 30 03 02 46 00 01 49 AB    - первый запрос от ЛЭРС к Пульсару

<< FB FB - ПСЧ-3ТМ.05М зачем-то решил отправить два байта, я был не прав, что все ответы начинаются с 5E
<< 88 44 31 30 03 02 29 01 - ЛЭРС ждет от Пульсара ответ из 10 байтов, поэтому контрольная сумма не верна
<< 76 38 - ЛЭРС сделал паузу!!! И хвост ответа от Пульсара ушел в никуда.

 88 44 31 30 03 02 46 00 01 49 AB    - второй запрос от ЛЭРС к Пульсару

<< 88 44 31 30 03 02 29 01 76 38 - правильный ответ от Пульсара, ЛЭРС его опрашивает не хуже, чем TestAll :slight_smile:

----- Порт закрыт -----
Ещё я подозреваю, что ЛЭРС забывает очищать буфер приёма ПОСЛЕ посылки посылки повторного запроса, или делает эту очистку не вовремя.

Задержка имеется в заводской программе, её можно настраивать, а вот в ЛЭРС этой возможности нет:
v6 параметры.png

ЛЭРС УЧЕТ делает очистку порта перед отправкой каждого запроса. Вы считаете это не корректным? Если да, то объясните, когда это должно выполняться?

Объясните, как задержка перед отправкой запроса должна повлиять на чтение данных драйвером, если на запрос к Пульсар приходит ответ одновременно и от ПСЧ-3ТМ.05М и от Пульсара?

Константин, вы не внимательно прочитали моё последнее сообщение. По логам видно, что ЛЭРС принимает от Пульсара байты, которые приходят в ответ на предыдущий запрос. Если бы была пауза и очистка буфера, такого бы не могло быть.

Sly, по всей видимости это вы не внимательно прочитали моё сообщение. ЛЭРС УЧЕТ делает очистку порта перед тем, как отправляет запрос прибору. После этого драйвер ждет данные, которые поступят в порт и считает, что все что поступило это ответ прибора. Перед чтением данных очистка порта не делается, поскольку это может привести к удалению данных, которые прибор уже передал и которые находятся в порту.

Вас абсолютно непонятно, где по вашему должна быть пауза, перед запросом или пере ответом.
Если вы говорите про паузу перед запросом к прибору, то она есть при повторных запросах после неудачного (при первом она отсутствует), при этом делается очистка порта.
Если вы говорите про паузу перед чтением данных, то у нас есть тайм-аут ожидания ответа, в течении которого служба опроса ожидает ответ от прибора. Очистку порта делать перед чтением данных бессмысленно, по причине, которую я описал выше. Если сделать очистку порта перед чтением, то вы не сможете получить нормальный ответ прибора для разбора его драйвером.

ЛЭРС УЧЕТ делает очистку порта перед отправкой каждого запроса.
Надёжнее было бы очищать буфер сразу после отправки запроса. В вашем случае, пока лэрс отправляет запрос, в буфер могут быть приняты байты, не имеющие отношения к запросу.

Вы ведь понимаете, что если сделать сделать очистку порта сразу после отправки запроса, то могут быть удалены данные, которые прибор уже отправил на этот запрос?

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

Вас абсолютно непонятно, где по вашему должна быть пауза, перед запросом или пере ответом.
Я очень понятно пишу, что пауза должна быть перед повторным запросом. Вы почему-то уверены, что в ответ придёт ровно десять байтов. Мы живём в неидеальном мире, и в ответ может прийти 12 байтов, например из-за помех в линии связи. Драйвер Пульсара в лэрсе это не учитывает. Он сразу очищает буфер, и в буфер сразу записываются 2 байта (12-10) ответа от предыдущего запроса. В это время драйвер ещё только начинает отправлять повторный запрос. А буфер в это время уже заполняется ответом на предыдущий запрос, ведь вы не делаете паузу.

Я абсолютно уверен, что очистку буфера правильно было бы производить сразу после отправки запроса. Оцените, сколько времени потребуется лэрсу на очистку буфера, и сколько потребуется времени, чтобы в буфер пришёл хотя бы один байт в ответ на запрос. На получение ответного байта времени потребуется в несколько раз больше, это связано с низкой скоростью коммуникаций и временем реакции опрашиваемого прибора.