1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Чтение данных по Modbus TCP

RS-485, ProfiBUS, 4-20 mA, Wi-Fi, GSM и так далее

Модератор: Глоб.модераторы

Ответить

Автор темы
Andrey 2014
осмотрелся
осмотрелся
Сообщения: 153
Зарегистрирован: 04 фев 2014, 14:52
Имя: Исаков Андрей Вячеславович
Благодарил (а): 2 раза

Чтение данных по Modbus TCP

Сообщение Andrey 2014 »

Здравствуйте. Пытаюсь читать данные по Modbus TCP из контроллера. Более 120 регистров за раз не читает (приходят нули в ответе). То есть выходит, чтобы мне прочитать все Holding регистры (40000 - 49999). Нужно 166 запросов к контроллеру сделать - это 3 секунды, как то не комильфо. Это я читал в документации что-то не так на протокол или действительно ограничение стоит?
И еще вопрос есть: первые два байта в сообщении - это идентификатор транзакции, написано, что можно произвольно выбрать. Что будет, если я произвольно выберу и случайно окажется еще кто-то, пытающийся читать данные с таким же идентификатором?

Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 5808
Зарегистрирован: 07 окт 2011, 09:12
Имя: Гаско Вячеслав Эриевич
Страна: Россия
город/регион: Рязань
Благодарил (а): 682 раза
Поблагодарили: 857 раз

Чтение данных по Modbus TCP

Сообщение Ryzhij »

А зачем читать все подряд?
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)

Автор темы
Andrey 2014
осмотрелся
осмотрелся
Сообщения: 153
Зарегистрирован: 04 фев 2014, 14:52
Имя: Исаков Андрей Вячеславович
Благодарил (а): 2 раза

Чтение данных по Modbus TCP

Сообщение Andrey 2014 »

Ну, если читать тут чуть-чуть, там чуть-чуть, то количество запросов будет большим, поэтому я подумал, что проще считать все регистры за раз и выбирать те, что мне надо из массива. А они читаться не хотят :)

checker
здесь недавно
здесь недавно
Сообщения: 40
Зарегистрирован: 30 окт 2009, 13:53
Имя: ----
Поблагодарили: 5 раз

Чтение данных по Modbus TCP

Сообщение checker »

Все просто. В ответе Modbus под количество байт данных отведен 1 байт. Т.е. устройство в ответ может за раз передать не более 256 байт данных. С учетом размера регистра получается: COIL/DISCRETE INPUT (1 бит) - не более 250 * 8 = 2000 регистров за запрос, INPUT/HOLDING (2 байта) - не более 250 / 2 = 125 регистров за запрос.

По номеру транзакции. Соединение TCP/IP - это соединение типа точка-точка. Ваше соединение другие клиенты не видят, и вы не видите другие соединения. Ваши номера транзакции никак не пересекается с номерами транзакции других клиентов и беспокоиться об этом не надо. Так что ставьте номер какой хотите. Обычно номер транзакции просто увеличивают на 1 с каждым запросом для контроля того, что устройство ответило на тот запрос, который вы сейчас ожидаете.

Автор темы
Andrey 2014
осмотрелся
осмотрелся
Сообщения: 153
Зарегистрирован: 04 фев 2014, 14:52
Имя: Исаков Андрей Вячеславович
Благодарил (а): 2 раза

Чтение данных по Modbus TCP

Сообщение Andrey 2014 »

checker, спасибо большое, все просто и доступно объяснили!
Но тогда все же остается вопрос. Как же драйвера SCADA системы успевают считывать большие объемы данных по Modbus TCP?

Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 5808
Зарегистрирован: 07 окт 2011, 09:12
Имя: Гаско Вячеслав Эриевич
Страна: Россия
город/регион: Рязань
Благодарил (а): 682 раза
Поблагодарили: 857 раз

Чтение данных по Modbus TCP

Сообщение Ryzhij »

Я никак не пойму, почему у Вас на запросы выходит аж три секунды? Это же не Serial RTU, а Ethernet.
Как Вы насчитали три секунды?
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)

Автор темы
Andrey 2014
осмотрелся
осмотрелся
Сообщения: 153
Зарегистрирован: 04 фев 2014, 14:52
Имя: Исаков Андрей Вячеславович
Благодарил (а): 2 раза

Чтение данных по Modbus TCP

Сообщение Andrey 2014 »

Я их в цикле опрашиваю последовательно. Возможно поэтому. Попробую асинхронно.

checker
здесь недавно
здесь недавно
Сообщения: 40
Зарегистрирован: 30 окт 2009, 13:53
Имя: ----
Поблагодарили: 5 раз

Чтение данных по Modbus TCP

Сообщение checker »

Сделал тест у себя. Чтение 9999 HOLDING регистров - это 80 запросов по 125 регистров. Мастер и слейв на одной машине - затраченное время 16 мс. Мастер и слейв на разных машинах в локальной сети - 35 мс.

PS. Для чистоты эксперимента: Windows 10 x64, i7 3.4 ГГц, память 32 Гб, сеть 100 Мбит/сек

Автор темы
Andrey 2014
осмотрелся
осмотрелся
Сообщения: 153
Зарегистрирован: 04 фев 2014, 14:52
Имя: Исаков Андрей Вячеславович
Благодарил (а): 2 раза

Чтение данных по Modbus TCP

Сообщение Andrey 2014 »

checker писал(а): Сделал тест у себя. Чтение 9999 HOLDING регистров - это 80 запросов по 125 регистров. Мастер и слейв на одной машине - затраченное время 16 мс. Мастер и слейв на разных машинах в локальной сети - 35 мс.
это синхронно или асинхронно?

checker
здесь недавно
здесь недавно
Сообщения: 40
Зарегистрирован: 30 окт 2009, 13:53
Имя: ----
Поблагодарили: 5 раз

Чтение данных по Modbus TCP

Сообщение checker »

Синхронно. В цикле 80 раз подряд: записали запрос, ждем заголовок, читаем заголовок, ждем данные, читаем данные, разбираем ответ, перекладываем регистры из ответа в свой буфер, следующий диапазон.

Автор темы
Andrey 2014
осмотрелся
осмотрелся
Сообщения: 153
Зарегистрирован: 04 фев 2014, 14:52
Имя: Исаков Андрей Вячеславович
Благодарил (а): 2 раза

Чтение данных по Modbus TCP

Сообщение Andrey 2014 »

Понятно. Буду говнокод перебирать, спасибо!

Автор темы
Andrey 2014
осмотрелся
осмотрелся
Сообщения: 153
Зарегистрирован: 04 фев 2014, 14:52
Имя: Исаков Андрей Вячеславович
Благодарил (а): 2 раза

Чтение данных по Modbus TCP

Сообщение Andrey 2014 »

checker, а чем вы читали данные? Просто я по локальной сети с контроллера SCADAPack 330 Holding регистры быстрее, чем за 1,5 секунды не могу прочитать при всем желании.

jov
здесь недавно
здесь недавно
Сообщения: 21
Зарегистрирован: 15 фев 2017, 19:30
Имя: Викулов Евгений Сергееевич
Страна: Россия
город/регион: Кемерово
Благодарил (а): 3 раза
Поблагодарили: 2 раза

Чтение данных по Modbus TCP

Сообщение jov »

Время ответа и впрямь из ряда вон. Самое медленное, что я видел - это ответ от BN 3500/92, порядка 20 мс на 100 регистров. Прежде чем пенять на контроллер, попробуйте посмотреть на трафик любым сетевым снифером - может "бутылочное горлышко" не в нём, а в клиенте

leon78
эксперт
эксперт
Сообщения: 1151
Зарегистрирован: 25 июл 2008, 10:06
Имя: Леонид
Страна: РФ
Благодарил (а): 49 раз
Поблагодарили: 135 раз

Чтение данных по Modbus TCP

Сообщение leon78 »

Обычно ПЛК отвечает в конце цикла сканирования. И количество запросов за скан контроллера ограничено.
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.

Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 5808
Зарегистрирован: 07 окт 2011, 09:12
Имя: Гаско Вячеслав Эриевич
Страна: Россия
город/регион: Рязань
Благодарил (а): 682 раза
Поблагодарили: 857 раз

Чтение данных по Modbus TCP

Сообщение Ryzhij »

leon78 писал(а): Обычно ПЛК отвечает в конце цикла сканирования.
Это зависит от наличия коммуникационного сопроцессора и, разумеется, от самой операционки на борту ПЛК.
Кстати, коммуникационные возможности являются одним из отличий PAC от PLC.
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)

checker
здесь недавно
здесь недавно
Сообщения: 40
Зарегистрирован: 30 окт 2009, 13:53
Имя: ----
Поблагодарили: 5 раз

Чтение данных по Modbus TCP

Сообщение checker »

Andrey 2014 писал(а):checker, а чем вы читали данные? Просто я по локальной сети с контроллера SCADAPack 330 Holding регистры быстрее, чем за 1,5 секунды не могу прочитать при всем желании.
Это скорость работы драйвера в нашей SCADA системе Каскад-САУ 4.0. В качестве сервера выступал сервер Modbus TCP из состава той же Каскад-САУ 4.0. Если модератор не сочтет за рекламу, то могу дать прямую ссылку на скачивание, чтобы попробовать. Или можете найти сами в файловом архиве на сайте из моих контактных данных.

Думаю, не совсем корректно мерить контроллер SCADAPack 330 32 МГц c обычным компьютером. А вот с другими контроллерами можно. Сделал сейчас еще тест: взял наш контроллер BCE-5 180 МГц, работает под управлением рантайма от Каскад-САУ 4.0. С него чтение 1000 HOLDING регистров занимает те же 30 мс.

Автор темы
Andrey 2014
осмотрелся
осмотрелся
Сообщения: 153
Зарегистрирован: 04 фев 2014, 14:52
Имя: Исаков Андрей Вячеславович
Благодарил (а): 2 раза

Чтение данных по Modbus TCP

Сообщение Andrey 2014 »

jov писал(а): ответ от BN 3500/92, порядка 20 мс на 100 регистров
ну, я то читаю 10000 регистров, то есть на 100 если умножить, примерно 2 секунды выходит будет читать с этого контроллера.
checker писал(а): Сделал сейчас еще тест: взял наш контроллер BCE-5 180 МГц. С него чтение 1000 HOLDING регистров занимает те же 30 мс.
1000 регистров читает примерно за 120-150 мс, но у вас процессор в 5,5 раз быстрее. Или это не влияет?

checker
здесь недавно
здесь недавно
Сообщения: 40
Зарегистрирован: 30 окт 2009, 13:53
Имя: ----
Поблагодарили: 5 раз

Чтение данных по Modbus TCP

Сообщение checker »

Andrey 2014 писал(а):1000 регистров читает примерно за 120-150 мс, но у вас процессор в 5,5 раз быстрее. Или это не влияет?
Конечно, влияет. У нас рантайм на контроллере работает под управлением ОСРВ eCos и параллельно в несколько потоков опрашивает устройства ввода, исполняет программы пользователя, отправляет свои данные на другие узлы по внутреннему протоколу, отвечает на запросы Modbus TCP и т.д. А процессор на все один, и если бы он был не 180 МГц, а 32 МГц, то на Modbus TCP оставалось меньше времени, а, следовательно, контроллер бы банально подтормаживал с ответами, увеличивая суммарное время опроса
Аватара пользователя

Jackson
администратор
администратор
Сообщения: 18834
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 990 раз
Поблагодарили: 1873 раза

Чтение данных по Modbus TCP

Сообщение Jackson »

Ryzhij писал(а): А зачем читать все подряд?
Andrey 2014 писал(а): Ну, если читать тут чуть-чуть, там чуть-чуть, то количество запросов будет большим
А нельзя так переконфигурировать адресное пространство, чтобы нужные для опроса данные сложить в соседние регистры? Мы так делаем, это существенно ускоряет обмен особенно на медленных интерфейсах.
Зависит от устройств, понимаю. Может стОит посмотреть на них внимательнее: можно ли так сделать?
По вопросам работы Форума можно обратиться по этим контактам.

Автор темы
Andrey 2014
осмотрелся
осмотрелся
Сообщения: 153
Зарегистрирован: 04 фев 2014, 14:52
Имя: Исаков Андрей Вячеславович
Благодарил (а): 2 раза

Чтение данных по Modbus TCP

Сообщение Andrey 2014 »

checker писал(а): Конечно, влияет.
То есть, в принципе, нормально, что скорость опроса такая низкая на scadapack?
TEB писал(а): А нельзя так переконфигурировать адресное пространство, чтобы нужные для опроса данные сложить в соседние регистры?
Можно конечно, но я то пишу библиотеку на шарпе для того, чтобы таскать данные из контроллера. Чтобы взял любой контроллер (даже запрограммированный неизвестными мне людьми) и прочитал данные по карте сигналов. То есть частный случай - это когда все хорошо и регистры последовательно занимают адреса, но ведь есть люди, которые любят разбросать данные, как носки по всей квартире, вот для таких случаев я и думал, что будет проще прочитать все регистры, а потом нужные уже вытащить.

checker
здесь недавно
здесь недавно
Сообщения: 40
Зарегистрирован: 30 окт 2009, 13:53
Имя: ----
Поблагодарили: 5 раз

Чтение данных по Modbus TCP

Сообщение checker »

Andrey 2014 писал(а):То есть, в принципе, нормально, что скорость опроса такая низкая на scadapack?
Это вопрос к разработчикам SCADAPack. Если и них главное - опрос блоков ввода-вывода и алгоритмы, а Modbus TCP идет в нагрузку с низким приоритетом по остаточному принципу - тогда это нормально. А может у них сам сервер Modbus TCP плохо написан - тогда не нормально.

Автор темы
Andrey 2014
осмотрелся
осмотрелся
Сообщения: 153
Зарегистрирован: 04 фев 2014, 14:52
Имя: Исаков Андрей Вячеславович
Благодарил (а): 2 раза

Чтение данных по Modbus TCP

Сообщение Andrey 2014 »

checker, а если я вам дам скомпилированную программку, можете проверить с какой скоростью будет читаться на вашем контроллере? Если боитесь вирусов, то просто исходник могу дать, компилировать в Visual Studio 2015.

checker
здесь недавно
здесь недавно
Сообщения: 40
Зарегистрирован: 30 окт 2009, 13:53
Имя: ----
Поблагодарили: 5 раз

Чтение данных по Modbus TCP

Сообщение checker »

Давайте программку, адрес написал в ЛС.

checker
здесь недавно
здесь недавно
Сообщения: 40
Зарегистрирован: 30 окт 2009, 13:53
Имя: ----
Поблагодарили: 5 раз

Чтение данных по Modbus TCP

Сообщение checker »

Поправка к тесту контроллера BCE-5 выше: опрос 10000 HOLDING регистров за 80 запросов занимает 170 мс.
Ответить

Вернуться в «Интерфейсы, протоколы, связь»