EnglishУкраїнськаmRussian
Login/New
Closed topic

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


Author Message
Written on: 16. 06. 2015 [13:24]
fido_max
Maxim Kochetkov
Contributor
registered since: 28.10.2010
Posts: 129
"monia" wrote:

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


Вообще-то это не совсем сбор данных. Для сбора данных предназначена подсистема сбора данных. А в протоколах содержится обратная сторона. Т.е. кто/-то/что-то опрашивает OpenSCADA по протоколу ModBus.

"monia" wrote:

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


А в БД оно каким образом попадает? Вообще информации мало предоставлено. По двум картинкам мало что можно понять. Может оно из вашей программы портится/перетирается? Запустите wireshark и снимайте логи TCP/IP.
Written on: 16. 06. 2015 [16:07]
monia
Олег Намятов
Topic creator
registered since: 21.05.2012
Posts: 173
А в БД оно каким образом попадает? Вообще информации мало предоставлено. По двум картинкам мало что можно понять. Может оно из вашей программы портится/перетирается? Запустите wireshark и снимайте логи TCP/IP.


Вы правы, по двум картинкам сложно понять.
Программа на контролерах работает адекватно и передает все правильно, по крайне мере я в этом убеждаюсь в течение 2 лет.
Да согласен звучит бредово но это факт, и возможно менее 1% ошибка в библиотеках TwinCat, но пака я этого не наблюдал.

По поводу wireshark, была такая мысля, но ошибка возникает не постоянно и апериодически. Т.е. нельзя подглодать момент, когда ошибка может возникнуть. Может 1 раз в неделю в одном узле или несколько раз на дню на нескольких узлах.
чаще всего ошибка возникает раз в 2-3 недели

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

Подсказали бы где расположена часть кода отвечающая за передачу данных из транспорта в узлы транспортного протокола :)
Written on: 16. 06. 2015 [16:18]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"monia" wrote:

Подсказали бы где расположена часть кода отвечающая за передачу данных из транспорта в узлы транспортного протокола :)

http://oscada.org/websvn/filedetails.php?repname=OpenSCADA&path=%2Ftrunk%2FOpenSCADA%2Fsrc%2Fmoduls%2Fdaq%2FModBus%2Fmodbus_prt.cpp

Learn, learn and learn better than work, work and work.
Written on: 19. 11. 2015 [10:44]
monia
Олег Намятов
Topic creator
registered since: 21.05.2012
Posts: 173
Вроде свою проблему решил, если это можно назвать решением

Я просто во входящих транспортах уменьшил максимальное количество клиентов и длину очереди, до 1 (у меня 94 входных транспортов, ModBus)

С такими настройками станцию тестирую с 20.09.15 и по сегодняшнее время. Ошибок, из-за наложения регистров(путаница в столбце "Значение", таблицы узла "Транспортный протокол"), пока не обнаруживал. Да и в БД теперь все в порядке.
Written on: 20. 11. 2015 [18:02]
legend
Oleg N
registered since: 13.04.2012
Posts: 63
Подскажите пожалуйста, работает ли функция modbus 15 (0x0F) — запись значений в несколько регистров флагов (Force Multiple Coils)?

Проблема в следующем. Есть modbus контроллер. Он поддерживает функцию 15.
Пытаюсь одновременно изменить статус 8 coil регистров. Команда на изменение значений битов в DAQ.ModBus приходит из контроллера LogicLev. По какой-то причине отправка команд по протоколу modbus осуществляется последовательно. Попробовал использовать функцию 5 и 15.
Результат одинаковый:

"log" wrote:

20-11-2015 18:31:52 298984 /sub_DAQ/mod_ModBus/cntr_LightController/ 0 Запрос -> 3C 05 00 07 FF 00 39 16 Ответ -> 3C 05 00 07 FF 00 39 16
20-11-2015 18:31:52 286376 /sub_DAQ/mod_ModBus/cntr_LightController/ 0 Запрос -> 3C 05 00 06 FF 00 68 D6 Ответ -> 3C 05 00 06 FF 00 68 D6
20-11-2015 18:31:52 273747 /sub_DAQ/mod_ModBus/cntr_LightController/ 0 Запрос -> 3C 05 00 05 FF 00 98 D6 Ответ -> 3C 05 00 05 FF 00 98 D6
20-11-2015 18:31:52 261106 /sub_DAQ/mod_ModBus/cntr_LightController/ 0 Запрос -> 3C 05 00 04 FF 00 C9 16 Ответ -> 3C 05 00 04 FF 00 C9 16
20-11-2015 18:31:52 248476 /sub_DAQ/mod_ModBus/cntr_LightController/ 0 Запрос -> 3C 05 00 03 FF 00 78 D7 Ответ -> 3C 05 00 03 FF 00 78 D7
20-11-2015 18:31:52 235865 /sub_DAQ/mod_ModBus/cntr_LightController/ 0 Запрос -> 3C 05 00 02 FF 00 29 17 Ответ -> 3C 05 00 02 FF 00 29 17
20-11-2015 18:31:52 223407 /sub_DAQ/mod_ModBus/cntr_LightController/ 0 Запрос -> 3C 05 00 01 FF 00 D9 17 Ответ -> 3C 05 00 01 FF 00 D9 17
20-11-2015 18:31:52 210847 /sub_DAQ/mod_ModBus/cntr_LightController/ 0 Запрос -> 3C 05 00 00 FF 00 88 D7 Ответ -> 3C 05 00 00 FF 00 88 D7
20-11-2015 18:30:45 759053 alModBus:LightController 1 DAQ.LightController: подключение к источнику данных: НОРМА.
20-11-2015 18:30:45 758738 /sub_DAQ/mod_ModBus/cntr_LightController/ 0 Запрос -> 3C 01 00 00 00 08 39 21 Ответ -> 3C 01 01 00 5C 24
20-11-2015 18:30:45 748453 /sub_DAQ/mod_ModBus/cntr_LightController/ 1 Запуск контроллера!
20-11-2015 18:30:45 747927 /sub_DAQ/mod_ModBus/cntr_LightController/ 1 Включение контроллера!
20-11-2015 18:30:40 68918 /sub_DAQ/mod_ModBus/cntr_LightController/ 1 Отключение контроллера!
20-11-2015 18:30:40 68720 alModBus:LightController 1 DAQ.LightController: подключение к источнику данных: ОСТАНОВЛЕН.
20-11-2015 18:30:39 968349 /sub_DAQ/mod_ModBus/cntr_LightController/ 1 Останов контроллера!
20-11-2015 18:29:27 400253 /sub_DAQ/mod_ModBus/cntr_LightController/ 0 Запрос -> 3C 0F 00 07 00 01 01 01 98 1A Ответ -> 3C 0F 00 07 00 01 21 27
20-11-2015 18:29:27 387610 /sub_DAQ/mod_ModBus/cntr_LightController/ 0 Запрос -> 3C 0F 00 06 00 01 01 01 A5 DA Ответ -> 3C 0F 00 06 00 01 70 E7
20-11-2015 18:29:27 375017 /sub_DAQ/mod_ModBus/cntr_LightController/ 0 Запрос -> 3C 0F 00 05 00 01 01 01 E1 DA Ответ -> 3C 0F 00 05 00 01 80 E7
20-11-2015 18:29:27 362395 /sub_DAQ/mod_ModBus/cntr_LightController/ 0 Запрос -> 3C 0F 00 04 00 01 01 01 DC 1A Ответ -> 3C 0F 00 04 00 01 D1 27
20-11-2015 18:29:27 349701 /sub_DAQ/mod_ModBus/cntr_LightController/ 0 Запрос -> 3C 0F 00 03 00 01 01 01 69 DA Ответ -> 3C 0F 00 03 00 01 60 E6
20-11-2015 18:29:27 337240 /sub_DAQ/mod_ModBus/cntr_LightController/ 0 Запрос -> 3C 0F 00 02 00 01 01 01 54 1A Ответ -> 3C 0F 00 02 00 01 31 26
20-11-2015 18:29:27 324598 /sub_DAQ/mod_ModBus/cntr_LightController/ 0 Запрос -> 3C 0F 00 01 00 01 01 01 10 1A Ответ -> 3C 0F 00 01 00 01 C1 26
20-11-2015 18:29:27 211133 /sub_DAQ/mod_ModBus/cntr_LightController/ 0 Запрос -> 3C 0F 00 00 00 01 01 01 2D DA Ответ -> 3C 0F 00 00 00 01 90 E6
20-11-2015 18:29:25 10268 /sub_DAQ/mod_ModBus/cntr_LightController/ 0 Запрос -> 3C 0F 00 07 00 01 01 00 59 DA Ответ -> 3C 0F 00 07 00 01 21 27
20-11-2015 18:28:26 440241 alModBus:LightController 1 DAQ.LightController: подключение к источнику данных: НОРМА.
20-11-2015 18:28:26 429374 /sub_DAQ/mod_ModBus/cntr_LightController/ 1 Запуск контроллера!
Attachment

mb1.PNG (File type: image/png, Size: 60.1 kilobytes) — 694 downloads
mb2.PNG (File type: image/png, Size: 24.46 kilobytes) — 694 downloads
mb3.PNG (File type: image/png, Size: 31.37 kilobytes) — 671 downloads
Written on: 20. 11. 2015 [18:30]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"legend" wrote:

Подскажите пожалуйста, работает ли функция modbus 15 (0x0F) — запись значений в несколько регистров флагов (Force Multiple Coils)?

В OpenSCADA работает или что не правильного в дампе от OpenSCADA?

"legend" wrote:

Проблема в следующем. Есть modbus контроллер. Он поддерживает функцию 15.
Пытаюсь одновременно изменить статус 8 coil регистров. Команда на изменение значений битов в DAQ.ModBus приходит из контроллера LogicLev. По какой-то причине отправка команд по протоколу modbus осуществляется последовательно. Попробовал использовать функцию 5 и 15.

И что собственно не так? LogicLev пишет в ModBus по одному атрибуту, которые синхронно пишутся отдельными пакетами. Ставьте запись в "Асинхронно" и будет писаться одним пакетом с периодичностью опроса.

Learn, learn and learn better than work, work and work.
Written on: 20. 11. 2015 [19:24]
legend
Oleg N
registered since: 13.04.2012
Posts: 63
"roman" wrote:

В OpenSCADA работает или что не правильного в дампе от OpenSCADA?

Корректно ли работает 15 функция в Oscada?
Лог прикрепил для того, что бы показать, что команды 0x0F последовательно отправляет байты по каждому из адресов, а не одной посылкой.

"roman" wrote:

И что собственно не так? LogicLev пишет в ModBus по одному атрибуту, которые синхронно пишутся отдельными пакетами. Ставьте запись в "Асинхронно" и будет писаться одним пакетом с периодичностью опроса.

Я так и предполагал, что LogicLev пишет в ModBus по одному атрибуту. Но думал, что установив флаг "Использовать функции записи нескольких элементов (15,16)", одновременное изменение состояний нескольких битов будет отправлено одной посылкой функцией записи 15(0x0F).

Установил флаг "Асинхронно", "Использовать функции записи нескольких элементов (15,16)", установил период опроса 1с. Результат такой же как в логе выше. Данные функцией записи 15(0x0F) записываются последовательно.
Written on: 20. 11. 2015 [20:02]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"legend" wrote:

"roman" wrote:

В OpenSCADA работает или что не правильного в дампе от OpenSCADA?

Корректно ли работает 15 функция в Oscada?

Да, корректно!
И то, что он пишет по одному биту-регистру не ошибка, поскольку:
- запись не является приоритетной, следовательно значения в блоки не собираются;
- типовая запись это по одному значению, следовательно асинхронный режим просто собирает их в очередь, без группировки, и часто не может этого сделать в принципе в виду фрагментации;
- в заявленных функциях нет сборки в блоки.

Следовательно не нужно в категорию "Отслеживание ошибок" такого писать!

Learn, learn and learn better than work, work and work.
Written on: 23. 11. 2015 [17:40]
legend
Oleg N
registered since: 13.04.2012
Posts: 63
"roman" wrote:

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

Роман, может быть я чего то не понимаю, но в описании протокола Modbus написано следующее:
5 (0x05) — запись значения одного флага (Force Single Coil).
15 (0x0F) — запись значений в несколько регистров флагов (Force Multiple Coils).
Т.е. 5 (0x05) отправляет по одному биту одной посылкой, 15 (0x0F) отправляет группу битов одной посылкой. Это организовано для того, чтобы уменьшить загрузку транспорта.

А чем в модуле DAQ.Modbus отличается отправка посылок функцией 5 и 15?
И зачем тогда вообще нужен параметр "Использовать функции записи нескольких элементов (15,16)"?
Written on: 23. 11. 2015 [18:11]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"legend" wrote:

И зачем тогда вообще нужен параметр "Использовать функции записи нескольких элементов (15,16)"?

Затем, что есть устройства у которых запись возможна исключительно функциями 15/16.
Форум читайте!

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


Only administrators can answer to this topic
10856