Вход

Просмотр полной версии : Маленький вопрос по Modbus



a_gricaj
10.01.2017, 21:53
Здравствуйте,

Подскажите пожалуйста такой вопрос, вот есть осциллограмма опроса :
28666
а вот увеличена:
28667
отсюда вопрос нормальна ли эта ситуация -60 мс между ответом и запросом, учитывая, что опрос ведется посредством Modbus.lib, скорость 9600?
При увеличении скорости уменьшится ли эта задержка?

Megavoltik
11.01.2017, 08:02
Задержка между запросом и ответом зависит от нескольких параметров:

1) Протяженность линии
2) Количества устройств на данной ветке
3) Скорости обработки информации приемником и передатчиком

Если говорить простыми словами, то битрейт - это скорость обмена, а задержка между ответом и запросом - это темп обмена информацией с определенным битрейтом. В CodeSys есть возможность настройки задержки ответа, но в разумных пределах, не зависимо от используемой библиотеки. Но на Slave устройстве тоже должна быть такая же возможность. Следует учитывать еще ограничение самого протокола Modbus которое минимально составляет около 1,5 бит тишины.

А вообще почитайте вот эту тему http://www.owen.ru/forum/showthread.php?t=7999
Может там найдете ответ на свой вопрос.

a_gricaj
11.01.2017, 09:19
Задержка между запросом и ответом зависит от нескольких параметров:

1) Протяженность линии
2) Количества устройств на данной ветке
3) Скорости обработки информации приемником и передатчиком

Если говорить простыми словами, то битрейт - это скорость обмена, а задержка между ответом и запросом - это темп обмена информацией с определенным битрейтом. В CodeSys есть возможность настройки задержки ответа, но в разумных пределах, не зависимо от используемой библиотеки. Но на Slave устройстве тоже должна быть такая же возможность. Следует учитывать еще ограничение самого протокола Modbus которое минимально составляет около 1,5 бит тишины.

А вообще почитайте вот эту тему http://www.owen.ru/forum/showthread.php?t=7999
Может там найдете ответ на свой вопрос.

СПС но там ничего не нашел, просто хочу понять, на что влияет изменение скорости обмена. О 1,5 бит тишины знаю, но почему у такая большая задержка...

Megavoltik
11.01.2017, 09:27
На задержку ответа не должно влиять. Но это по самому стандарту Modbus. что там натворил Овен самому Овену и извесно :D . Вообще попробуйте экспериментально. Мне самому интересно стало.

Если не секрет - какие приборы используете?

rwg
11.01.2017, 09:55
Нельзя ли поподробнее про 1,5 бит тишины? Может быть имелись ввиду байты или мсек?
А вообще задержка между ответом и запросом обычно настраиваемый параметр, зависит от кривизны драйверов мастера (сколько ему нужно на подготовку запроса) и слейвов (сколько им нужно на подготовку к приёму). Для стандартных Modbus RTU на 9600 достаточно 3мсек, а по факту - как повезёт.

Megavoltik
11.01.2017, 10:39
Нельзя ли поподробнее про 1,5 бит тишины? Может быть имелись ввиду байты или мсек?
А вообще задержка между ответом и запросом обычно настраиваемый параметр, зависит от кривизны драйверов мастера (сколько ему нужно на подготовку запроса) и слейвов (сколько им нужно на подготовку к приёму). Для стандартных Modbus RTU на 9600 достаточно 3мсек, а по факту - как повезёт.

Я немного ошибся. Давно это было, поэтому освежил немного знания. t1,5 - это меж символьный интервал, а интервал между запросами составляет t3,5. Т.е. между битами во фрейме не более t1,5 , а между фреймами t3,5. Описано перекрасно все в этом документе http://www.modbus.org/docs/Modbus_over_serial_line_V1_02.pdf . В частности стр.13

VaBo
11.01.2017, 10:45
Задержка между запросом и ответом зависит от нескольких параметров:

1) Протяженность линии
2) Количества устройств на данной ветке

Не зависит.

a_gricaj
11.01.2017, 11:24
Использую СПК107 и экспериментирую на ПЧВ, но подключены к опросу разные модули от овен - почти вся линейка.

Сменил скорость с 9600 на 38400 так вот эта задержка (увеличенный график) уменшилась с 60 мс до 50 мс - это все по осцилографу... так эта задержка вроде зависит от скорости - не много ли это 50-60мс???

Megavoltik
11.01.2017, 11:52
Использую СПК107 и экспериментирую на ПЧВ, но подключены к опросу разные модули от овен - почти вся линейка.

Сменил скорость с 9600 на 38400 так вот эта задержка (увеличенный график) уменшилась с 60 мс до 50 мс - это все по осцилографу... так эта задержка вроде зависит от скорости - не много ли это 50-60мс???

Я бы не назвал это уменьшением задержки)

Rake Runner
11.01.2017, 11:54
Резонный вопрос - а какое значение у параметра RS.dl в конфигураторе Mx110?

Megavoltik
11.01.2017, 12:27
Резонный вопрос - а какое значение у параметра RS.dl в конфигураторе Mx110?

Насколько я помню, стандартно было 2мс. А у топик стартера хороший вопрос

a_gricaj
11.01.2017, 14:16
Насколько я помню, стандартно было 2мс. А у топик стартера хороший вопрос

при настройке модулей этот параметр не трогал - стоит 2 мс

мне непонятно почему 60 мс порт стоит и ничего не делает...

rwg
11.01.2017, 14:35
У топикстартера было написано "-60 мс между ответом и запросом", то есть тупит мастер. У него всё правильно настроено?

a_gricaj
11.01.2017, 15:27
У топикстартера было написано "-60 мс между ответом и запросом", то есть тупит мастер. У него всё правильно настроено?

Я опрашиваю 2 шт 8а, 6у, 16Дн,16р,8р,МДВВ, ПЧ Овен и ПЧ Лензе (собственно вот еще моя тема - разбирался с библиотекой http://www.owen.ru/forum/showthread.php?t=25836&page=3) - опрос идет - модули опрашиваю, что можно еще неправильно настроить???

Этой же бибкой на другом объекте плк110 опрашивает 55 МДВВ по четырем портам - и вроде быстрее....

a_gricaj
11.01.2017, 16:00
А у него цикл-то какой ? Небось мс по 20 ?

в "мониторе" средний - 3,5мс

rwg
11.01.2017, 16:27
У СПК 207 время между ответом и запросом называется " Время между фреймами " в настройках СОМ- порта и по умолчанию стоит 20 мсек.

a_gricaj
11.01.2017, 16:54
У СПК 207 время между ответом и запросом называется " Время между фреймами " в настройках СОМ- порта и по умолчанию стоит 20 мсек.

Это при использовании конфигуратора? Тогда согласен. У меня же бибка....

a_gricaj
11.01.2017, 16:55
Что значит в мониторе ? Не время в цикле, а от начала до начала цикла

Я имел ввиду это:
28682

а Вы?????

a_gricaj
11.01.2017, 18:50
А хрен знает что это. Понятней по-бразильски :

t := time() - t0; //на t смотрим. Квантование в мс - пофиг.
t0 := time();

Причем втыкать это - в месте где ваш мастер рулит

Кстати макс в 29мс - когда ? осциллу с временем цикла (t) можно сопоставить ?

по-бразильски) - максимум, что видел 10 мс(один раз за пару минут наблюдения), в основном плавает до 1-2-5мс (тут уже как на ноуте обновляется)

По 29 мс - не знаю откуда они берутся так как во время исполнения кода до 29 не залетает, возможно при загрузке СПК, и по осциллу я не поймаю....

Gans
14.01.2017, 12:19
Здравствуйте,

Подскажите пожалуйста такой вопрос, вот есть осциллограмма опроса :
28666
а вот увеличена:
28667
отсюда вопрос нормальна ли эта ситуация -60 мс между ответом и запросом, учитывая, что опрос ведется посредством Modbus.lib, скорость 9600?
При увеличении скорости уменьшится ли эта задержка?


Здравствуйте, А_Грация.
ОГРОМНОЕ СПАСИБО за осциллограммы.
Дайте я угадаю - это ведь задержка ответа при запросе аналогового параметра? и протокол ModBus-RTU?

Данный вопрос не однократно возникал на просторах данного форума и после очередного холивара сходились во мнении:
1. Если работаем с библиотекой, то читать за раз сразу все нужные регистры со слейва.
2. Сменить протокол.
3. Аналоговые модели перенесите на отдельный интерфейс и там играться с настройками связи (увеличение времени таймоута).

P. S. Еще раз СПАСИБО за скринны осциллограм, надеюсь сотрудники ОВЕН теперь не отвертятся :-) С аналогичной ситуацией столкнулся еще в далёком 2007 году и с тех пор использую протокол "ОВЕН" ни каких проблем с опросом модулей овен не было:rolleyes:

a_gricaj
16.01.2017, 18:09
Здравствуйте, А_Грация.
ОГРОМНОЕ СПАСИБО за осциллограммы.
Дайте я угадаю - это ведь задержка ответа при запросе аналогового параметра? и протокол ModBus-RTU?

Данный вопрос не однократно возникал на просторах данного форума и после очередного холивара сходились во мнении:
1. Если работаем с библиотекой, то читать за раз сразу все нужные регистры со слейва.
2. Сменить протокол.
3. Аналоговые модели перенесите на отдельный интерфейс и там играться с настройками связи (увеличение времени таймоута).

P. S. Еще раз СПАСИБО за скринны осциллограм, надеюсь сотрудники ОВЕН теперь не отвертятся :-) С аналогичной ситуацией столкнулся еще в далёком 2007 году и с тех пор использую протокол "ОВЕН" ни каких проблем с опросом модулей овен не было:rolleyes:

Это действительно ModBus-RTU, но задержка между последним ответом и следующим запросом - мастер "гуляет":mad: - 50 мс, а между запросом ответом 5-10 мс, при чем без разницы аналоговый модуль, дискретный или ЧП.
По поводу чтения пакетом - ситуация с одновременным опросом 8А (чтение 48 регистров) и ЧП - просто улыбнула - ЧП уходит в ручной стоп:):):):) - пришлось делить запрос к 8А на две части.
Второй интерфейс будет использоваться для мониторинга - будет весеть модем, менять протокол не буду - и так уже достали переделки....

К слову могу предоставить еще осциллограммы - где Плк110 имеет такую же задержку после ответа предыдущего устройства, но только 25 мс (тоже МОДБАС.ЛИБ ) но непомню какая там скорость 38400 или 57600, другая осцилла есть - опрос модулей ОВЕНА ОРС-сервером от Инсата там задержка в районе 2-5 мс (по памяти) на скорости 57600.

Хотелось бы услышать мнение представителей ОВЕН по этой теме..... это так задумано или я косячу???

Gans
16.01.2017, 23:14
Это действительно ModBus-RTU, но задержка между последним ответом и следующим запросом - мастер "гуляет":mad: - 50 мс, а между запросом ответом 5-10 мс, при чем без разницы аналоговый модуль, дискретный или ЧП.

Здравствуйте, А_Грация.

Похоже, что мастер модбус-рту счёл ответ не заслуживающим доверия и простоял 50 мс. Затем по таймауту послал следующий запрос.
Я не замечал ни каких проблем с дискретными модулями на протоколе модбус-рту и смело их юзаю на этом протоколе. Правда, если есть хоть один аналоговый модуль или ТРМххх и тд. сразу перехожу на протокол ОВЕН и ни каких проблем! На сколько я понимаю проблем нет и на протоколе ASCII.
На счет гулянья 5-10 мс это скорее всего цикл программы внутренностей слэйва.

a_gricaj
16.01.2017, 23:44
Здравствуйте, А_Грация.

Похоже, что мастер модбус-рту счёл ответ не заслуживающим доверия и простоял 50 мс. Затем по таймауту послал следующий запрос.
Я не замечал ни каких проблем с дискретными модулями на протоколе модбус-рту и смело их юзаю на этом протоколе. Правда, если есть хоть один аналоговый модуль или ТРМххх и тд. сразу перехожу на протокол ОВЕН и ни каких проблем! На сколько я понимаю проблем нет и на протоколе ASCII.
На счет гулянья 5-10 мс это скорее всего цикл программы внутренностей слэйва.

Не помню точно, но вроде экспериментировал - делал тайм аут 100мс на одном модуле (16дн) следил за "Exception" - организован счетчик - все равно задержка - 50-60мс, наверное нужно повторить эксперимент.....

a_gricaj
17.01.2017, 13:38
Для сравнения
СПК107:
28765
ПЛК110(правда сигнал подгулявший):
28766
ОРС-сервер:
28767

Rake Runner
17.01.2017, 13:50
Для сравнения
СПК107:
28765
ПЛК110(правда сигнал подгулявший):
28766
ОРС-сервер:
28767

Скрины сетевых настроек СПК будут выложены-то?
А то, в принципе, при "правильном" подходе можно и минутные паузы получать, в чем проблема-то.

a_gricaj
17.01.2017, 14:26
Один из вариантов:


SettingsCOM2.sPort:=2;
SettingsCOM2.byStopBits:=1;
SettingsCOM2.byParity:=0;
SettingsCOM2.ulBaudrate:=9600;
SettingsCOM2.ulTimeout:=0;
SettingsCOM2.ulBufferSize:=0;
SettingsEXCOM2.byByteSize:=8;

// [2] открываем COM-порт
ComServiceCOM2(
Enable:=TRUE,
Settings:=SettingsCOM2,
Sets_Ex:=SettingsEXCOM2,
Task:=OPEN_TSK);

//ОПРОС
IF ComServiceCOM2.Ready THEN

CASE Step OF

0: IF MV110_8ABoks1 THEN Step:=1; ELSE ErrorMV110_8aAdr5:=0;Step:=2;END_IF
1: TON(IN:= Step=1, PT:=T#1MS , Q=> Enable, ET=> );
MV110_8aAdr5(
Enable:= Enable,
Mode:= MB_RTU,
DevAddr:= 10,
FirstAddr:= 0,
Quantity:= 35,
ComHandle:= ComServiceCOM2.Handle,
TimeOut:= T#100MS,
Buffer:= Buffer,
Complete=> Complete,
Exception=> ErrorMV110_8aAdr5,
ByteCnt=> DataSize);
IF Complete (*если установлен признак завершения операции, то *)
THEN
IF ErrorMV110_8aAdr5=0 THEN BufferDataM1AI:=Buffer;END_IF
IF ErrorMV110_8aAdr5<>0 AND AlarmMV110_8aAdr5=FALSE THEN AmountMV110_8aAdr5:=AmountMV110_8aAdr5+1; ELSE AmountMV110_8aAdr5:=0;END_IF
IF AmountMV110_8aAdr5>SetAmount THEN AlarmMV110_8aAdr5:=TRUE;END_IF
MV110_8aAdr5(Enable:= FALSE, Buffer:=Buffer);
TON(IN:=FALSE);
Step:=2; (*переходим к выполнению следующего ФБ*)
END_IF
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2: IF MV110_8ABoks2 THEN Step:=3; ELSE ErrorMV110_8aAdr6:=0;Step:=4;END_IF
3: TON(IN:= Step=3, PT:=T#1MS , Q=> Enable, ET=> );
MV110_8aAdr6(
Enable:= Enable,
Mode:= MB_RTU,
DevAddr:= 30,
FirstAddr:= 0,
Quantity:= 35,
ComHandle:= ComServiceCOM2.Handle,
TimeOut:= T#100MS,
Buffer:= Buffer,
Complete=> Complete,
Exception=> ErrorMV110_8aAdr6,
ByteCnt=> DataSize);
IF Complete (*если установлен признак завершения операции, то *)
THEN
IF ErrorMV110_8aAdr6=0 THEN BufferDataM2AI:=Buffer;END_IF
IF ErrorMV110_8aAdr6<>0 AND AlarmMV110_8aAdr6=FALSE THEN AmountMV110_8aAdr6:=AmountMV110_8aAdr6+1; ELSE AmountMV110_8aAdr6:=0;END_IF
IF AmountMV110_8aAdr6>SetAmount THEN AlarmMV110_8aAdr6:=TRUE;END_IF
MV110_8aAdr6(Enable:= FALSE, Buffer:=Buffer);
TON(IN:=FALSE);
Step:=4; (*переходим к выполнению следующего ФБ*)
END_IF

и так далее......

Rake Runner
17.01.2017, 14:33
И какое время цикла у этой программы?

a_gricaj
17.01.2017, 20:47
И какое время цикла у этой программы?

Пост №20 этой темы посмотрите пожалуйста, там скрин...

Rake Runner
17.01.2017, 21:04
Пост №20 этой темы посмотрите пожалуйста, там скрин...

Интересно не реальное время, а заданное для задачи MainTask.

a_gricaj
18.01.2017, 09:23
Интересно не реальное время, а заданное для задачи MainTask.

10 мс - заданно для задачи MainTask