Українська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 кілобайтів) — 1525 завантажень
Набор запросов_ответов.png (Тип файлу: image/png, Розмір: 93.75 кілобайтів) — 1506 завантажень
16 MHz, 1 B Samples [45].logicdata (Тип файлу: application/octet-stream, Розмір: 172.78 кілобайтів) — 1401 завантажень
Повідомлення створено: 01. 09. 2017 [18:00]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
Сразу, это не ошибка 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 мс все заработало четко.




11359