[18045] Ошибка при опросе Modbus

Столкнулся с проблемой при опросе оборудования через протокол Modbus RTU. При нестабильной связи (возникновении таймаутов) ЛЭРС УЧЁТ может записать значение, прочитанное из регистра серийного номера, в данные измеряемого параметра.


Если серийный номер не указывать, такой проблемы не наблюдалось.

Версия ЛЭРС 3.67.3

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

Значение записывалось в параметр h, а серийный номер в регистре 254

Сессия опроса 18946958 начинается в 19:15:23, затем идут таймауты и в 19:16:40 видно что параметр h = 14, и slave id = 14, хотя h должен быть 0

Логи: Логи ЛЭРС — Яндекс Диск

Вы приложили журнал работы Службы опроса, тогда как запрашивался журнал опроса. Пожалуйста приложите именно журнал опроса. Как его сохранить смотрите здесь.

Прикрепил журнал по той же ссылке, но дамп обмена за этот опрос пустой

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

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

Этот файл с дампом уже был прикреплен по ссылке

У вас в журнале опроса отражен опрос сразу 4-х точек учета. Привязка ячеек во всех них одинаковая, как на представленных скриншотах? Или у каждой точки свои привязки?

У каждой точки свой адрес h - 129, 130, 131, 132, остальное все одинаковое

Упустил из виду. Точек на самом деле 5. Уточнить адрес параметра h в 5-й точке.

В 5-й точке адрес h - 133

Уточните, пожалуйста, во всех 5-ти точках параметр h принимает одинаковое значение или в каждой точке свое? В текущем примере в параметре h во всех точках хранится значение 14 после опроса?

После опроса в этом примере только в одной точке параметр h принимает значение 14, в остальных принимает значение 0.

Спасибо за обращение! Мы поставили в план работ исправление данной ошибки. Как только она будет исправлена, мы сообщим в какой версии будет доступно исправление.

Обсудили ситуацию с разработчиками. Данная ситуация возникает из-за того, что на запрос текущих данных приходит ответ с серийным номером, который относится к одному из ранее отправленных повторных запросов серийного номера, ввиду очень длительной задержки с ответами, которая взывала такую рассинхронизацию запросов и ответов. К сожалению какого либо способа обойти ее гарантированно не существует, так как протокол Modbus RTU (как и Modbus ASCII) не предназначены для удаленных подключений и не ориентированы на случай рассинхронизации запросов и ответов либо и вовсе потери пакетов. В них не предусмотрено каких либо признаков, которые позволяют сопоставить запрос и ответ. Они ориентированы на прямое подключение, при котором на практике в нормальных условиях такая ситуация не возникает.

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