К ПЛК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 миллисекунды.
Как оказалось, не такой уж это и идеальный расклад :D :D :D
Поздравляю!
Sergey_Byk, вы далеко не первый на этом форуме, кто жалуется на библиотеку модбас.
Насколько я понял, прирост производительности получен за счет исключения двух лишних циклов ПЛК на каждом обмене?
То есть каждый следующий запрос гарантированно посылается в следующем цикле ПЛК вне зависимости от наличия ответа от слейва. Типа режим "пакетных запросов".
А в общем, пользователь современного ПЛК не должен заниматься реализацией обмена данными с распределенной периферией. Производитель ПЛК должен обеспечить все условия, чтобы пользователь сконцентрировался на основной задаче - управление технологическим процессом. Если ,конечно, производитель хочет выглядеть конкурентоспособным.
Номера стандартов МЭК и пунктов в них, которым "это противоречит" в студию! Ну или хотя бы на словах.
Отнюдь. Он исключил "пустые" циклы в алгоритме передачи данных. Вместо выполнения приема-передачи раз в три цикла, они выполняются каждый цикл. Максимальная длительность задачи при этом не изменилась.
Ну да, ну да. Только такой подход долго не протянет. Кетайцы придут на российский рынок и за эту же цену еще и кофеварку в ПЛК встроят.
Модуль mk110-8д.4р, скорость com порта 115200, работа со своей библиотекой modbus, среда разработки Builder.
запрос на считывание 7 счетчиков (пакет : 0x01,0x03,0x00,0x40,0x00,0x07,0x05,0xDC)
ответ: 01 03 0E 00 00 00 12 00 12 00 12 00 12 00 12 00 12 CE C7
Устойчивый обмен 65 пакетов в секунду.
мде.. а через вашу библиотеку не больше 20 :(