К ПЛК308 по MODBUS подключены модули Мх110. Обмен происходит с помощью библиотеки ModBus 3.1.1 на скорости 115200. За секунду опрашивается только 20 модулей. Каким образом можно увеличить это количество?
К ПЛК308 по MODBUS подключены модули Мх110. Обмен происходит с помощью библиотеки ModBus 3.1.1 на скорости 115200. За секунду опрашивается только 20 модулей. Каким образом можно увеличить это количество?
самое простое решение - распараллелить
А более изящного решения для контроллера предназначенного для работы с последовательными интерфейсами не существует?
среднее время одного обмена с кучетом скорости передачи, timeout и прочее- 30мс, т.е. где-то 30 операций обмена в секунду, вы опрашиваете 20 модулей как минимум один параметр. дальше только, как уже сказал alhoresm распараллеливать.
Запись маски состояния выходов в МУ110-8Р - 10 байт+3.5 байт тишины+2 mS(настройка самого модуля), ответ - 8 байт + 3.5 байт тишины.Итого 25 байт. ТимеОут для отсутствия ответа, а не обмена. На 1 байт тратим 8 бит данные, 1 старт и 1 стоп биты. - 25*10/115200mS + 2mS= 4,2mS (но никак не 30 mS). В итоге 1 S/4,2 mS ~ 230 запросов в секунду для скорости 115200. Черт с ними, с 230, но хотябы по количеству тактов в секунду самого контроллера - 40 можно как-то приблизться?
а вы каким способом реализуете обмен? через функциональные блоки или с помощью стандартных средств CoDeSys
с помощью библиотеки ModBus 3.1.1
На одну операцию обмена уходит при идеальном раскладе 3 цикла. Время цикла ПЛК 20мс. Итого то, что Вы имеете 20 операций обмена в секунду, уже выше расчетного.
может быть скажу тупость:
попробуйте за один цикл работы ПЛК отправлять/получать несколько запросов
Накидал на досуге обмен по MODBUS без использования библиотеки ModBus.compiled-library и получил стабильный обмен 50 раз в секунду. В связи с этим обстоятельством хотелось бы выразить нереспект разработчикам библиотеки ModBus.compiled-library ака ModBus 3.1.1.
Основная идея обмена - за один цикл программы сначала принимается, затем отправляется запрос. Также необходимо настроить в модулях задержку ответа в 2 миллисекунды.