УкраїнськаEnglishmRussian
Вход/Новый
В теме нет новых постов

[BugWrong] Коллизия на шине RS485.


Автор Сообщение
Сообщение создано: 01. 09. 2017 [15:13]
VasiliyKhursa
Василий Хурса
Создатель темы
Зарегистрирован(а) с: 06.07.2017
Сообщения: 2
Ситуация в следующем: есть контроллер, который опрашивается с помощью ModbusRTU, контроллер подключен к ПК через преобразователь USB-to-RS485. Scada настроена на опрос определенного количества регистров лежащих в разных местах - соответственно скада формирует определенное количество запросов, что бы считать нужные регистры с прибора (около 10 запросов). Но в средине этих запросов бывает, что скада не дожидаясь окончания ответа, делает новый запрос и из-за этого появляется коллизия на шине RS485.
Отлавливал проблему с помощью логического анализатора - выложил картинки и лог данных с анализатора.
Версия openScada 0.9+r2508.
Операционка Linux-4.4.0-89-generic.
Заметил закономерность - что эта коллизия получается в момент получения данных из 7-8ми регистров за раз.
Постарался максимально описать сложившуюся ситуацию. Если нарушил правила - не пинайте сильно, я исправлюсь. Первый раз на здешнем форуме.
Вложенный файл

Колизия.png (Тип файла: image/png, Размер: 97.45 килобайт) — 1414 загрузок
Набор запросов_ответов.png (Тип файла: image/png, Размер: 93.75 килобайт) — 1397 загрузок
16 MHz, 1 B Samples [45].logicdata (Тип файла: application/octet-stream, Размер: 172.78 килобайт) — 1289 загрузок
Сообщение создано: 01. 09. 2017 [18:00]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
Сразу, это не ошибка OpenSCADA, поэтому не сюда!

"VasiliyKhursa" wrote:

Ситуация в следующем: есть контроллер, который опрашивается с помощью ModbusRTU, контроллер подключен к ПК через преобразователь USB-to-RS485. Scada настроена на опрос определенного количества регистров лежащих в разных местах - соответственно скада формирует определенное количество запросов, что бы считать нужные регистры с прибора (около 10 запросов). Но в средине этих запросов бывает, что скада не дожидаясь окончания ответа, делает новый запрос и из-за этого появляется коллизия на шине RS485.

Про "недожидает" читать на предмет таймаута подключения-реакции слейва здесь: http://wiki.oscada.org/Doc/Serial#h835-6.

"VasiliyKhursa" wrote:

Отлавливал проблему с помощью логического анализатора - выложил картинки и лог данных с анализатора.
Версия openScada 0.9+r2508.

Пробуйте последнюю, там заменен механизм блокировки критической секции в исходящих транспортах.

"VasiliyKhursa" wrote:

Заметил закономерность - что эта коллизия получается в момент получения данных из 7-8ми регистров за раз.

Логично, контроллер дольше формирует ответ, а таймаут подключения мал.

Learn, learn and learn better than work, work and work.
Сообщение создано: 02. 09. 2017 [11:03]
VasiliyKhursa
Василий Хурса
Создатель темы
Зарегистрирован(а) с: 06.07.2017
Сообщения: 2
Спасибо большое за ответ!
Действительно установив больший таймаут в выходном транспорте, в настройке "Временные интервалы"

(Временные интервалы интерфейса в формате строки: "conn:symbol[-NextReqMult][:KeepAliveTm[:rtsDelay1:rtsDelay2]]"). Где:
symbol — время символа в миллисекундах. Используется для контроля факта окончания фрейма и таймаута следующего запроса; .

Установив symbol равным 50 мс все заработало четко.




4067