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

[BugWrong] [Закрыта] Транспортный протокол.ModBus


Автор Сообщение
Сообщение создано: 15. 06. 2015 [12:41]
monia
Олег Намятов
Создатель темы
Зарегистрирован(а) с: 21.05.2012
Сообщения: 173
Заметил непонятную запись в таблицу регистров.

Сначала подумал, что проблема в программе контроллера(PLC).
Потом немного под разобравшись в архивах параметров (новая запись заноситься по изменению временной переменной)
заметил, что запись в архив занеслась как и положено, но с частью не корректных регистров (регистры не относящиеся к данному PLC, т.е. PLC не отправлял такие данные)

на рисунке с лева выделена область резкого изменения данных (U_V2fA и U_V2fB - по иди это 2 WORD-а составляющие временя изменения параметров), справа показана последовательность регистров




Вложенный файл

Снимок экрана от 2015-06-15 12:11:10.png (Тип файла: image/png, Размер: 664.43 килобайт) — 1587 загрузок
Сообщение создано: 15. 06. 2015 [12:57]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"monia" wrote:

Сначала подумал, что проблема в программе контроллера(PLC).
Потом немного под разобравшись в архивах параметров (новая запись заноситься по изменению временной переменной)
заметил, что запись в архив занеслась как и положено, но с частью не корректных регистров (регистры не относящиеся к данному PLC, т.е. PLC не отправлял такие данные)

на рисунке с лева выделена область резкого изменения данных (U_V2fA и U_V2fB - по иди это 2 WORD-а составляющие временя изменения параметров), справа показана последовательность регистров

Явно это на ошибку в OpenSCADA не указывает и скорее всего тут Ваше непонимание происходящего или обработки запросов, например, того-же EVAL.

Кроме того у меня подобное нигде не воспроизводится, а значит выяснить-исправить причину этому я не могу в принципе, следовательно Вам и выяснять! Или воспроизводите на ДемоБД.

Learn, learn and learn better than work, work and work.
Сообщение создано: 15. 06. 2015 [13:03]
monia
Олег Намятов
Создатель темы
Зарегистрирован(а) с: 21.05.2012
Сообщения: 173
Немного не дописал

По ощущениям где то в OpenSCADA происходит смещение или не высвобождение в памяти

Такая проблема не периодична и возникает на разных узлах Транспортный протокол.ModBus. Может возникнуть 1 раз в неделю и на одном узле, или несколько раз в день на разных узлах.

Сразу оговорюсь:
1) проблема возникла у нескольких программистов нашей компании, которые независимо друг от друга пишут свой код передач и приема данных по ModBusTCP
2) Моя реализация кода на передающем PLC позволяет передавать данные только пачками. 3 пачки с 3 временными метками: аварийные, не аварийные и аналоговые параметры
Сообщение создано: 15. 06. 2015 [13:10]
monia
Олег Намятов
Создатель темы
Зарегистрирован(а) с: 21.05.2012
Сообщения: 173
Явно это на ошибку в OpenSCADA не указывает и скорее всего тут Ваше непонимание происходящего или обработки запросов, например, того-же EVAL.


Да можно и так сказать, но причем здесь EVAL

В таблицу регистров, данные я не записываю из OpеnSCADA (я имею ввиду столбец "Значения"),
а все что в этих регистрах я заношу в БД, после предварительной обработки (деление на 10 или на 100 + разложение на биты)
и если посмотреть слева на рисунке видно что 1 запись сильно отличается, а точнее ее часть
и эта часть каким то образом попала с другого узала Транспортный протокол.ModBus


Кстати, такое изменение регистров всегда разное, происходит в разных регистрах и на разных узлах Транспортный протокол.ModBus.
т.е. нет никакой закономерности, по крайне мери за последние 3 месяца я ее не нашел

[Сообщение редактировалось 2 раз(а), в последний раз 15.06.2015 в 13:25.]
Сообщение создано: 15. 06. 2015 [15:12]
monia
Олег Намятов
Создатель темы
Зарегистрирован(а) с: 21.05.2012
Сообщения: 173
Нашел еще одну запись левых регистров

на левой стороне показываю передаваемые регистры на сервер, на правой прием этих регистров
а на втором рисунке данные в БД

т.е. сначала регистры передались нормально, а потом по какой то причини они перезаписались левыми регистрами
При этом PLC не чего на сервер не передавал

P.S. на сервере настроил фаервол, определенный IP (PLC) может вещать на определенный порт. т.е. несколько PLC не могут вещать на один и тот же порт

[Сообщение редактировалось 1 раз(а), в последний раз 15.06.2015 в 15:16.]
Вложенный файл

Снимок экрана от 2015-06-15 14:11:45.png (Тип файла: image/png, Размер: 825.18 килобайт) — 1442 загрузок
Снимок экрана от 2015-06-15 15:00:37.png (Тип файла: image/png, Размер: 629.44 килобайт) — 1466 загрузок
Сообщение создано: 15. 06. 2015 [17:48]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"monia" wrote:

на левой стороне показываю передаваемые регистры на сервер, на правой прием этих регистров
а на втором рисунке данные в БД

т.е. сначала регистры передались нормально, а потом по какой то причини они перезаписались левыми регистрами
При этом PLC не чего на сервер не передавал

Отладку включайте и смотрите что куда передаётся поскольку то что показано на стороне другой программы не показатель.

"monia" wrote:

P.S. на сервере настроил фаервол, определенный IP (PLC) может вещать на определенный порт. т.е. несколько PLC не могут вещать на один и тот же порт

А это для TCP к чему? Они и не смогут на один порт подключиться в принципе.

Learn, learn and learn better than work, work and work.
Сообщение создано: 16. 06. 2015 [08:07]
monia
Олег Намятов
Создатель темы
Зарегистрирован(а) с: 21.05.2012
Сообщения: 173
А это для TCP к чему? Они и не смогут на один порт подключиться в принципе.

Для того, что бы избежать ситуации случайного вещания PLCs на 1 порт сервера
По скольку Beckhoff не поддерживает постоянного соединения и устанавливает его при необходимости передачи пакета на сервер

Отладку включайте и смотрите что куда передаётся поскольку то что показано на стороне другой программы не показатель.

Где имеешь ввиду включить отладку, на стороне контроллера или на стороне OpenSCADA?

Если на стороне OpeSCADA то как?
Я видел в OpenSCADA только Отчет для ModBus модуля, но этого для отладки недостаточно. По скольку неделю неотрывно в моник пялится не реально.
Сообщение создано: 16. 06. 2015 [08:38]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"monia" wrote:

Отладку включайте и смотрите что куда передаётся поскольку то что показано на стороне другой программы не показатель.

Где имеешь ввиду включить отладку, на стороне контроллера или на стороне OpenSCADA?

Естественно, или к чему тут этот пост и на что грешим?!

"monia" wrote:

Если на стороне OpeSCADA то как?

Если это рабочая версия, то для сервера ModBus тут: http://wiki.oscada.org/Doc/OpisanieProgrammy#h827-1
а для клиента тут: http://wiki.oscada.org/Doc/OpisanieProgrammy/part4/files?get=subsys_daq_mod_cntr_diagn.png

И сопоставляйте затем на время проблемы, что там и куда реально пришло.


Learn, learn and learn better than work, work and work.
Сообщение создано: 16. 06. 2015 [10:20]
monia
Олег Намятов
Создатель темы
Зарегистрирован(а) с: 21.05.2012
Сообщения: 173
Если это рабочая версия, то для сервера ModBus тут:http://wiki.oscada.org/Doc/OpisanieProgrammy#h827-1

Поконкретней пожалуйста.

Можешь рассказать или кинуть ссылку на принцип передачи/сбора данных(регистров) с транспорта и передачи их в таблицу узла "Транспортный протокол.ModBus"


Мои предположение, что где то возникает сбой при передачи параметров с транспорта в узлы Транспортный протокол.ModBus

по скольку:
1) программа на контроллерах (94 шт.) передает данные пачками в конкретные порты и регистры на сервере.
И если сбой был бы в программе, то проблема наблюдалась бы постоянна, часто, с определенной периодичностью и во всех узлах Транспортный протокол.ModBus, но данная проблема возникает редко и апериодически. Кстати из-за этого сложно отследить ошибку встроенными методами самой OpenSCADA, по скольку OpenSCADA не умеет вести лог входящих пакетов или ModBus запросов в узлах Транспортный протокол.ModBus
2) На сервере настроен фаервол (для определенного IP открыт определенный порт), что исключает возможность случайного перепутанного порта в коде передатчика параметров, в программе контроллера
3) на рисунках я показал, что передавал контроллер и когда, а также, что творится в таблице регистров.
Рисунком я хотел сказать, что регистры были изменены не контроллером, а самой OpenSCADA в момент распределения данных с транспорта в узлы Транспортный протокол.ModBus. Я повторюсь, проблема возникает редко и апериодически.

На рисунке, время передачи данных на сервер была 02.06.2015 08:14:23 и данные были записаны в регистры R11w-R13w, что свидетельствует запись в БД
Если перевести 2 WORD в DT (R12w, R13w) то получим время 11.06.2015 20:18:46 - скорее всего это время прихода аналоговых параметров, с другого контроллера.
Но это не возможно, по скольку на сервере стоит фаервол (см. п2). Отсюда и вывод напрашивается, что что-то в OpenSCADA не так

[Сообщение редактировалось 1 раз(а), в последний раз 16.06.2015 в 11:06.]
Сообщение создано: 16. 06. 2015 [11:25]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"monia" wrote:

Но это не возможно, по скольку на сервере стоит фаервол (см. п2). Отсюда и вывод напрашивается, что что-то в OpenSCADA не так

Что не так, конкретно!

Ещё раз повторяю!
Пока у меня проблема не воспроизведена я её не исправляю.
В рамка бесплатного сервиса тут я не вникаю в детали пользователей.
Следовательно, воспроизводите на ДемоБД если хотите показать мне проблему!

Learn, learn and learn better than work, work and work.


Только администраторы могут отвечать на эту тему
2473