This is topic Частота обмена по RS-485 modbus in forum Общие вопросы / Common questions at Форум TRACE MODE: техническая поддержка.


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

Posted by Demus1 (Участник № / Member № 3844) on :
 
Здравствуйте.
До некоторго момента не задавались вопросом как быстро ТМ опрашивает контроллеры. Но т.к. на одном из объектов данные обновляются медленно, то стало интересно как часто шлются посылки в самом простом случае.
Создал проект из одного источника/приемника и канала с запросом данных по RS-485 modbus. Таймаут 300мс. Воткнул в ноутбук преобразователь USB/RS-485. На выход преобразователя повесил осциллограф. Получилось что в стандартом цикле пересчета обмен возобновляется каждые 2с. При переключении в цикл fast - каждую секунду. И это при отсутствии какой-либо графики (лишь текстовый блок со значением канала) в проекте. Прошу пояснить почему так происходит. На объекте с другим преобразователем (Modbus TCP/IP) также посылки идут каждые 2с. хотя там >13 слейвов. Что изменить и в чем причина?
Ноутбук Win 7 home 64 разарядная

[ 07.12.2011, 10:24: Сообщение отредактировал / Message edited by AdAstra Technical Support ]
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Частота транзакций асинхронного RS-потока зависит
- от периода обработки базы каналов,
- от периодов обработки каналов, работающих по RS,
- от "Скорости" в настройках COM-порта,
- от заданной настройки COM-порта
RS-передача – задержка (в миллисекундах) между транзакциями (процедурами ЗАПРОС/КОМАНДА+ОТВЕТ) (по умолчанию равна 0),
- от реактивности опрашиваемого устройства,
- от величины заданного таймаута ожидания ответа (если устройство не отвечает или отвечает с задержкой),
- от свойств драйвера-эмулятора COM-порта и преобразователя USB/RS-485.

Тесты обмена по RS-232 (через USB/RS-232) показали, что предельная частота транзакций на скорости 9600 равна 8 транзакций в сек., на скорости 115200 - 16 транзакций в сек.

Ограничение суммарной интенсивности транзакций по COM-порту мало зависит от количества устройств, которые опрашиваются по этому COM-порту.

Контроль потока осуществлялся перехватчиком COM-порта (например, для Windows 7/64 - Advanced serial port monitor.exe
free-serial-port-monitor.exe
serial_port_monitor_eltima.exe).

Для Modbus TCP суммарная интенсивность транзакций практически целиком определяется реактивностью слейвов. К этому добавляется фактор управления коннектом - при потере связи с устройством сокет уничтожается и на последующее восстановление связи затрачивается дополнительное время.
 
Posted by Demus1 (Участник № / Member № 3844) on :
 
Спасибо за ответ. Уточняю некоторые параметры и прошу совета как найти причину.
1. период обрабоки базы каналов в проекте с одним каналом не может вносить существенного вклада во время.
2. база канлов RS тоже
3. скорость 9600
4. Таймаут 300 мс. Остальные накстройки по умолчанию =0.
По идее остается драйвер-эмулятор COM-порта или преобразователь, если рассматривать RS-485.
Если рассматривать TCP, то здесь также сомнение вызывает преобразователь из Ethernet в rs-485.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
"период обработки базы каналов в проекте с одним каналом не может вносить существенного вклада во время."
Если период обработки базы каналов узла равен по умолчанию 10*0.055 и период пересчета канала Modbus RTU равен 1*"цикл CALC", то, конечно, настройки проекта не могут вызвать такие задержки.
Для диагноза надо точно знать не то, что выдается на RS-485, а то, что МРВ выдает в COM-порт.
Для этого надо перехватить именно трафик COM-порта. Либо указанной выше утилитой, либо заданием в файле конфигурирования запуска узла *.cnf ключа DEBUG=200. В протоколе профайлера будут сообщения об ошибках по Modbus RTU с временными метками.

Продиагностировать трафик Modbus TCP в релизе 6.07.7 лучше всего с помощью "Управление и диагностика обмена по встроенным протоколам".
Для простоты у ChGroup, привязанного к @e_TCP_ModBus, надо в реальном времени задать атрибут 90 (I0) равным 0xFFFF – в этом случае анализируются все устройства.
 
Posted by Demus1 (Участник № / Member № 3844) on :
 
Установил большую скорость и приоритет для потока RS и протоколорование. Что получилось:
(18:0:20) INF_RS:init string is \\.\COM6: baud=115200 parity=N data=8 stop=1
(18:0:20) WRN_RS:found channels = 1
(18:0:32) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:32) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:32) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:33) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:33) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:33) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:34) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:34) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:35) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:36) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:36) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:37) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:37) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:38) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:38) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:38) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:39) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:39) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:40) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:41) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:41) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:42) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:42) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:42) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:43) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:43) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:43) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:45) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:45) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:45) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:46) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:46) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:47) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:47) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:48) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:48) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:49) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:49) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:50) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:50) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:51) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:51) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:52) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:52) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:52) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:53) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:54) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:54) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:55) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:55) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:55) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:56) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:56) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:57) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:57) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:58) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:58) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:59) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:0:59) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:0) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:0) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:1) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:1) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:2) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:2) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:3) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:3) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:4) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:4) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:5) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:5) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:5) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:6) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:6) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:7) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:8) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:8) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:8) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:9) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:9) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:10) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:10) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:11) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:11) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:12) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:13) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:13) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:14) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:14) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:14) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:15) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:15) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:15) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:17) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:17) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:17) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:18) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:18) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:18) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:19) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:19) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:20) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:20) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:21) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:22) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:22) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:23) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:23) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:24) ERR_RS:COM:6 Read 0 symbol(err=9 ch=Rout_Word(3)#1[1])
(18:1:24) INF_RS:COM6 TRANSACTION=109 ERROR=109 TIME=55.365
(18:1:24) INF_RS: TOTAL_BYTE=872 AVR_RESPONSE=-37.408 MAX_RESPONSE=0.344

Что скажете? Я пока что вижу - обмен идет постоянно по 4 посылки в секунду (нормально, учитывая отсутствие слейва), на осциллограмме же 1 посылка в секунду.
Преобразователь Delta IFD 6500.
 -
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Приоритет для RS-потока роли в данном случае не играет. Нужно вернуть обратно.
Если по COM-порту посылаются запросы 2-4 раза в сек., а на выходе преобразователя - 1 раз в сек., надо изучать и, если возможно, настраивать преобразователь.
У нас такого преобразователя нет, проводить исследования мы не можем.
 
Posted by Demus1 (Участник № / Member № 3844) on :
 
Какие преобразователи USB/RS-485 посоветуете для применения вместе с ТМ?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
В Адастре испытывались модемы
- MOXA UPort 1110 (COM232)
- MOXA UPort 2410 (COM232)
- MOXA UPort 1150I (RS 485)

Пользователи часто предпочитают преобразователи фирмы MOXA (по критериям надежности и стоимости).
 


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2