This is topic Функция 03 Modbus - групповой запрос in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.
Есть такой прибор - шестиканальный регистратор МТМ-160. Разработчик по нашим многочисленным просьбам реализовал упрощенную версию Modbus - поддерживается только функция 03, причем данные по всем шести каналам выдаются блоком: 6 FLOAT - 12 WORDS. Стандарту Modbus соответствует... Как правильно в Trace Mode реализовать такой групповой запрос и разложить этот блок по каналам? Физически по линии связи это будет один блоковый запрос-ответ или шесть с отсечкой лишних данных?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Используйте шесть источников ModBus с параметром "Канал" со сдвигом 1. Т.е. Задавайте, например, номера каналов в настройка ModBus источников номера 0,2,4,6,8,10.
Posted by andreas (Участник № / Member № 1561) on :
Спасибо, все работает в лучшем виде!
Posted by Дмитрий Юрьевич М. (Участник № / Member № 1930) on :
Я сделал 10 каналов (U1-U10), сделал 10 источников Modbus со смещением канала 1, привязал их последовательно к созданным каналам. В итоге имею ситуацию:
Я поставил в слэйве распечатку параметров startChannel (адрес первого элемента массива) и refCount (количество запрашиваемых элементов). В самый первый раз лог показывает всё верно (1, 10) - запросить 10 элементов, начиная с первого. Однако на следующем цикле ситуация меняется. Он сначала запрашивает (2, 9), а сразу вслед за этим (1, 10). И после этого такая ситуация повторяется на каждом цикле. Увеличение количества каналов не меняет ситуации. Всё равно запросы оказываются парными.
Могу ли я что-нибудь изменить или это фича TM? Мне не очень хочется в 2 раза повышать нагрузку на сеть.
И вопрос, связанный с первым. Правильно ли я понимаю, что для группового запроса каналы U1-U10 должны следовать в базе каналов строго друг за другом? Или можно как-то по другому реализовать нужную функциональность?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
1. "Парные запросы" появляются потому, что на первый из них не получен корректный ответ за время таймаута, заданное у настройках COM-порта. Надо разобраться, что отвечает SLAVE и в какое время. Можно использовать какой-либо перехватчик COM-порта, например, PortMon (их много в интернете). 2. Последовательность индексов каналов одного группового запроса, соответствующих последовательным адресам переменных, должна быть монотонной, не обязательно "строго друг за другом".
Posted by Дмитрий Юрьевич М. (Участник № / Member № 1930) on :
1. У меня Modbus TCP/IP. Утилиткой воспользуюсь. Но данные приходят, вот в чём проблема. Как после первого, так и после второго запроса TM данные получает. Поэтому не знаю, о чём и думать. Причём ситуация не меняется, если увеличивать или уменьшать время цикла. Так что дело не в таймауте 2. Спасибо
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Время цикла и таймаут - параметры из разных категорий. Таймаут и другие параметры для обмена по MODBUS TCP задаются в файле IP_modBus (без расширения). Это отражено в документации. Чтобы удостовериться в безошибочности приема, надо ввести соответствующие диагностические переменные, посмотреть флаг недостоверности у каналов и протокол профайлера. И безусловно надо обновиться до текущего релиза, выложенного на нашем сайте.