EnglishУкраїнськаmRussian
Login/New
Topic with no new replies

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


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

Колизия.png (File type: image/png, Size: 97.45 kilobytes) — 1415 downloads
Набор запросов_ответов.png (File type: image/png, Size: 93.75 kilobytes) — 1399 downloads
16 MHz, 1 B Samples [45].logicdata (File type: application/octet-stream, Size: 172.78 kilobytes) — 1289 downloads
Written on: 01. 09. 2017 [18:00]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 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.
Written on: 02. 09. 2017 [11:03]
VasiliyKhursa
Василий Хурса
Topic creator
registered since: 06.07.2017
Posts: 2
Спасибо большое за ответ!
Действительно установив больший таймаут в выходном транспорте, в настройке "Временные интервалы"

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

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




9991