This is topic Функция 03 Modbus - групповой запрос in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/31/t/000290.html

Posted by andreas (Участник № / Member № 1561) on :
 
Есть такой прибор - шестиканальный регистратор МТМ-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 (без расширения).
Это отражено в документации.
Чтобы удостовериться в безошибочности приема, надо ввести соответствующие диагностические переменные, посмотреть флаг недостоверности у каналов и протокол профайлера.
И безусловно надо обновиться до текущего релиза, выложенного на нашем сайте.
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2