Сообщение создано: 29. 01. 2010 [17:30]
|
petr
Petro Litkovets
Contributor
Создатель темы
Зарегистрирован(а) с: 12.01.2010
Сообщения: 27
|
На ALT Linux 5.0 обновил Open SCADA до версии 0.6.4.1 , локальная сборка с помощью svn update.
1. Не правильно отображаются атрибуты параметров для ModBus RTU.
В подсистеме "Транспорты" для последовательного интерфейса создал выходной транспорт который работает с USB-RS485 адаптером.После настройки временных интервалов ошибки исчезли, "EVAL" перестало появляться вообще.
В подсистеме "Сбор данных" в модуле "ModBus" создал контроллер с параметрами и атрибутами. Ошибка =0,т.е. ошибки нету, но атрибуты отображаются циклически нестабильно,
несколько секунд правильно, а потом значения атрибутов отображаются не на своих местах, как будто данные для атрибутов присваиваются не по адресу, т.е. сами данные правильные, но присваиваются хаотически к разным переменным.
у меня на машине две локальных сборки Open SCADA. На старой которую скачал 07.01.2010 через "svn co" этой ошибки нету.
Рис. 1 Несколько секунд отображается правильно.
Рис.2 Данные для атрибутов отображаются не по адресу
Рис.3 Еще по другому
2. На графиках не отображается "Панель группы графиков".
Для виджета "Группа графиков" в атрибуте "обработка событий" установлено значение "ws_FocusIn:/trnd1: open:/pg_control/pg_grph_panel_mod".
После установки "ws_FocusIn:/trnd1: open:/pg_control/pg_grph_panel" панель начала отображаться.
3.Перечитал документацию и не нашёл,каким образом, в ModBus RTU, можно считывать два регистра одновременно с одного адреса. Если можно, то как это сделать?
Есть задачи когда надо с помощью функциональных кодов операции 03, 04, 10 считать два регистра которые находятся под одним адресом.
[Сообщение редактировалось 1 раз(а), в последний раз 29.01.2010 в 18:07.]
|
Сообщение создано: 29. 01. 2010 [19:09]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
petr wrote:
несколько секунд правильно, а потом значения атрибутов отображаются не на своих местах, как будто данные для атрибутов присваиваются не по адресу, т.е. сами данные правильные, но присваиваются хаотически к разным переменным.
у меня на машине две локальных сборки Open SCADA. На старой которую скачал 07.01.2010 через "svn co" этой ошибки нету.
Конфигурация транспорта какая? Там было переделано и таймауты были исправлены. Таймаут подключения был завышен, а время символа подпёрто сверху 1мс. В любом случае у меня корректно работает и ничего не перескакивает.
petr wrote:
2. На графиках не отображается "Панель группы графиков".
Для виджета "Группа графиков" в атрибуте "обработка событий" установлено значение "ws_FocusIn:/trnd1: open:/pg_control/pg_grph_panel_mod".
После установки "ws_FocusIn:/trnd1: open:/pg_control/pg_grph_panel" панель начала отображаться.
Поправил. Завтра обновлю пакет релиза с рядом дополнительных изменений.
petr wrote:
3.Перечитал документацию и не нашёл,каким образом, в ModBus RTU, можно считывать два регистра одновременно с одного адреса. Если можно, то как это сделать?
Есть задачи когда надо с помощью функциональных кодов операции 03, 04, 10 считать два регистра которые находятся под одним адресом.
Как это "два регистра находится под одним адресом"?
Реализованы стандартные механизмы ModBus c применением команд: 0x03, 0x06, 0x01, 0x05, 0x02 и 0x04.
Если нужны нестандартности то это руками посредством функции API ( http://wiki.oscada.org/Doc/OpisanieProgrammy?v=14os#h920-1 ):
int messIO( XMLNodeObj req, string prt ); - отправка запроса <req> к протоколу <prt> для осуществления сеанса связи через транспорт посредством протокола.
Learn, learn and learn better than work, work and work.
|
Сообщение создано: 29. 01. 2010 [23:30]
|
petr
Petro Litkovets
Contributor
Создатель темы
Зарегистрирован(а) с: 12.01.2010
Сообщения: 27
|
Конфигурация транспорта
Временные интервалы пробовал увеличивать (586:2 минимальный при котором не возникает ошибка <EVAL> ) но атрибуты параметров всё равно перескакивают и главное нет индикации ошибок ни в транспортах ни в атрибутах
Опять проверил старую версию 0.6.4, там временные интервалы 800:4:400 и при этом работает без ошибок и никаких перескакиваний нету. Должна же быть где то ошибка.
А на счёт передачи нескольких регистров по протоколу ModBus RTU, есть специализировнные контроллеры в которых например под адресом 1586 есть вещественная переменная т.е 4байта или 2 регистра, а под адресом 1587 вторая, под 1588 третья и т.д, Производители пишут, что это у них стандартный протокол.
Прочитал в Wiki: http://ru.wikipedia.org/wiki/Modbus
Стандартные функции протокола Modbus
# 3 (0x03) — чтение значений из нескольких регистров хранения (Read Holding Registers)
# 4 (0x04) — чтение значений из нескольких регистров ввода (Read Input Regist)
# 16 (0x10) — запись значений в несколько регистров хранения (Preset Multiple Registers)
Конечно того что уже есть в Open SCADA достаточно для большинства реализаций, тогда буду пробовать функцию int messIO( XMLNodeObj req, string prt ) ,
Только где искать информацию по формированию запроса XMLNodeObj req, есть где то в документации или может смотреть в исходниках?
Linux только начал изучать с начала этого года благодаря Open SCADA , теперь возвращаться к Винде желание полность отпало.
|
Сообщение создано: 30. 01. 2010 [16:04]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
petr wrote:
Временные интервалы пробовал увеличивать (586:2 минимальный при котором не возникает ошибка <EVAL> ) но атрибуты параметров всё равно перескакивают и главное нет индикации ошибок ни в транспортах ни в атрибутах
Опять проверил старую версию 0.6.4, там временные интервалы 800:4:400 и при этом работает без ошибок и никаких перескакиваний нету. Должна же быть где то ошибка.
На скорости 19200 у меня устойчиво работает при таймингах: 586:8. В данном случае вторая цифра сильно влияет на связь поскольку заложена в вычислении таймаута тишины и дожидания. А ошибку он может не показывать если это не ошибка соединения, а сразу за ошибкой большого пакета нормально опрашивается короткий пакет. Что касается перемещения атрибутов то такого я никогда не видел. В любом случае для отлова подобнного есть лог протокола ModBus и возможность отправки запросов в ручную.
petr wrote:
А на счёт передачи нескольких регистров по протоколу ModBus RTU, есть специализировнные контроллеры в которых например под адресом 1586 есть вещественная переменная т.е 4байта или 2 регистра, а под адресом 1587 вторая, под 1588 третья и т.д, Производители пишут, что это у них стандартный протокол.
И причём тут два регистра под одним адресом? Это два разных регистра с двумя отдельными адресами, которые после опроса просто нужно объединить. Форум внимательнее читайте. Здесь про это уже неоднократно было.
Learn, learn and learn better than work, work and work.
|
Сообщение создано: 01. 02. 2010 [00:16]
|
petr
Petro Litkovets
Contributor
Создатель темы
Зарегистрирован(а) с: 12.01.2010
Сообщения: 27
|
Роман как всегда оказался прав. Спасибо за подсказку.
Оказывается ввело в заблуждение изменение поведения протокола после нововведений в транспорте.
Если вторая цифра временных интервалов транспорта, которая отвечает за таймаут тишины и дожидания была меньше 2, то индицировало ошибку <EVAL> ,
от 2 до 10 никих ошибок не было, но атрибуты параметров перескакивали с места на место и складывалось впечатление как будто там ошибка в адрессации,
если от 11 и выше работает отлично. Работало пол дня, смотрел графики, ошибки отсутствуют.
|