PDA

Просмотр полной версии : Скорость опроса модулей ввода/вывода.



Sergey_Byk
23.06.2011, 14:05
К ПЛК308 по MODBUS подключены модули Мх110. Обмен происходит с помощью библиотеки ModBus 3.1.1 на скорости 115200. За секунду опрашивается только 20 модулей. Каким образом можно увеличить это количество?

alhoresm
23.06.2011, 17:04
самое простое решение - распараллелить

Sergey_Byk
24.06.2011, 06:29
А более изящного решения для контроллера предназначенного для работы с последовательными интерфейсами не существует?

Евгений Сергеевич
24.06.2011, 10:28
среднее время одного обмена с кучетом скорости передачи, timeout и прочее- 30мс, т.е. где-то 30 операций обмена в секунду, вы опрашиваете 20 модулей как минимум один параметр. дальше только, как уже сказал alhoresm распараллеливать.

Sergey_Byk
24.06.2011, 11:49
Запись маски состояния выходов в МУ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 можно как-то приблизться?

Евгений Сергеевич
24.06.2011, 12:55
а вы каким способом реализуете обмен? через функциональные блоки или с помощью стандартных средств CoDeSys

Sergey_Byk
24.06.2011, 13:12
с помощью библиотеки ModBus 3.1.1

Евгений Сергеевич
24.06.2011, 16:20
На одну операцию обмена уходит при идеальном раскладе 3 цикла. Время цикла ПЛК 20мс. Итого то, что Вы имеете 20 операций обмена в секунду, уже выше расчетного.

alhoresm
25.06.2011, 13:08
может быть скажу тупость:
попробуйте за один цикл работы ПЛК отправлять/получать несколько запросов

Sergey_Byk
27.06.2011, 13:36
Накидал на досуге обмен по MODBUS без использования библиотеки ModBus.compiled-library и получил стабильный обмен 50 раз в секунду. В связи с этим обстоятельством хотелось бы выразить нереспект разработчикам библиотеки ModBus.compiled-library ака ModBus 3.1.1.
Основная идея обмена - за один цикл программы сначала принимается, затем отправляется запрос. Также необходимо настроить в модулях задержку ответа в 2 миллисекунды.

Serge_UA
27.06.2011, 14:51
На одну операцию обмена уходит при идеальном раскладе 3 цикла.
Как оказалось, не такой уж это и идеальный расклад :D :D :D

Накидал на досуге обмен по MODBUS без использования библиотеки ModBus.compiled-library и получил стабильный обмен 50 раз в секунду. В связи с этим обстоятельством хотелось бы выразить нереспект разработчикам библиотеки ModBus.compiled-library ака ModBus 3.1.1.
Основная идея обмена - за один цикл программы сначала принимается, затем отправляется запрос. Также необходимо настроить в модулях задержку ответа в 2 миллисекунды.

Поздравляю!
Sergey_Byk, вы далеко не первый на этом форуме, кто жалуется на библиотеку модбас.
Насколько я понял, прирост производительности получен за счет исключения двух лишних циклов ПЛК на каждом обмене?
То есть каждый следующий запрос гарантированно посылается в следующем цикле ПЛК вне зависимости от наличия ответа от слейва. Типа режим "пакетных запросов".


А в общем, пользователь современного ПЛК не должен заниматься реализацией обмена данными с распределенной периферией. Производитель ПЛК должен обеспечить все условия, чтобы пользователь сконцентрировался на основной задаче - управление технологическим процессом. Если ,конечно, производитель хочет выглядеть конкурентоспособным.

ASo
01.07.2011, 23:19
Накидал на досуге обмен по MODBUS без использования библиотеки ModBus.compiled-library и получил стабильный обмен 50 раз в секунду. В связи с этим обстоятельством хотелось бы выразить нереспект разработчикам библиотеки ModBus.compiled-library ака ModBus 3.1.1.
Основная идея обмена - за один цикл программы сначала принимается, затем отправляется запрос. Также необходимо настроить в модулях задержку ответа в 2 миллисекунды.Только это противоречит всем правилам работы в языках типа МЭК!
Вы забрали время у других процессов.

ASo
01.07.2011, 23:20
А в общем, пользователь современного ПЛК не должен заниматься реализацией обмена данными с распределенной периферией. Производитель ПЛК должен обеспечить все условия, чтобы пользователь сконцентрировался на основной задаче - управление технологическим процессом. Если ,конечно, производитель хочет выглядеть конкурентоспособным.Все дело в цене на билет (с)

Serge_UA
04.07.2011, 12:58
Только это противоречит всем правилам работы в языках типа МЭК!

Номера стандартов МЭК и пунктов в них, которым "это противоречит" в студию! Ну или хотя бы на словах.


Вы забрали время у других процессов.

Отнюдь. Он исключил "пустые" циклы в алгоритме передачи данных. Вместо выполнения приема-передачи раз в три цикла, они выполняются каждый цикл. Максимальная длительность задачи при этом не изменилась.


Все дело в цене на билет (с)
Ну да, ну да. Только такой подход долго не протянет. Кетайцы придут на российский рынок и за эту же цену еще и кофеварку в ПЛК встроят.

Денис Зелинский
16.11.2012, 08:53
Модуль 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 :(