Сообщение создано: 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 килобайт) — 1535 загрузок
|
Сообщение создано: 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 мс все заработало четко.
|