- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Чтение данных по Modbus TCP
Модератор: Глоб.модераторы
-
- осмотрелся
- Сообщения: 153
- Зарегистрирован: 04 фев 2014, 14:52
- Имя: Исаков Андрей Вячеславович
- Благодарил (а): 2 раза
Чтение данных по Modbus TCP
Здравствуйте. Пытаюсь читать данные по Modbus TCP из контроллера. Более 120 регистров за раз не читает (приходят нули в ответе). То есть выходит, чтобы мне прочитать все Holding регистры (40000 - 49999). Нужно 166 запросов к контроллеру сделать - это 3 секунды, как то не комильфо. Это я читал в документации что-то не так на протокол или действительно ограничение стоит?
И еще вопрос есть: первые два байта в сообщении - это идентификатор транзакции, написано, что можно произвольно выбрать. Что будет, если я произвольно выберу и случайно окажется еще кто-то, пытающийся читать данные с таким же идентификатором?
И еще вопрос есть: первые два байта в сообщении - это идентификатор транзакции, написано, что можно произвольно выбрать. Что будет, если я произвольно выберу и случайно окажется еще кто-то, пытающийся читать данные с таким же идентификатором?
-
- почётный участник форума
- Сообщения: 5807
- Зарегистрирован: 07 окт 2011, 09:12
- Имя: Гаско Вячеслав Эриевич
- Страна: Россия
- город/регион: Рязань
- Благодарил (а): 680 раз
- Поблагодарили: 856 раз
Чтение данных по Modbus TCP
А зачем читать все подряд?
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)
-
- осмотрелся
- Сообщения: 153
- Зарегистрирован: 04 фев 2014, 14:52
- Имя: Исаков Андрей Вячеславович
- Благодарил (а): 2 раза
Чтение данных по Modbus TCP
Ну, если читать тут чуть-чуть, там чуть-чуть, то количество запросов будет большим, поэтому я подумал, что проще считать все регистры за раз и выбирать те, что мне надо из массива. А они читаться не хотят :)
-
- здесь недавно
- Сообщения: 40
- Зарегистрирован: 30 окт 2009, 13:53
- Имя: ----
- Поблагодарили: 5 раз
Чтение данных по Modbus TCP
Все просто. В ответе Modbus под количество байт данных отведен 1 байт. Т.е. устройство в ответ может за раз передать не более 256 байт данных. С учетом размера регистра получается: COIL/DISCRETE INPUT (1 бит) - не более 250 * 8 = 2000 регистров за запрос, INPUT/HOLDING (2 байта) - не более 250 / 2 = 125 регистров за запрос.
По номеру транзакции. Соединение TCP/IP - это соединение типа точка-точка. Ваше соединение другие клиенты не видят, и вы не видите другие соединения. Ваши номера транзакции никак не пересекается с номерами транзакции других клиентов и беспокоиться об этом не надо. Так что ставьте номер какой хотите. Обычно номер транзакции просто увеличивают на 1 с каждым запросом для контроля того, что устройство ответило на тот запрос, который вы сейчас ожидаете.
По номеру транзакции. Соединение TCP/IP - это соединение типа точка-точка. Ваше соединение другие клиенты не видят, и вы не видите другие соединения. Ваши номера транзакции никак не пересекается с номерами транзакции других клиентов и беспокоиться об этом не надо. Так что ставьте номер какой хотите. Обычно номер транзакции просто увеличивают на 1 с каждым запросом для контроля того, что устройство ответило на тот запрос, который вы сейчас ожидаете.
-
- осмотрелся
- Сообщения: 153
- Зарегистрирован: 04 фев 2014, 14:52
- Имя: Исаков Андрей Вячеславович
- Благодарил (а): 2 раза
Чтение данных по Modbus TCP
checker, спасибо большое, все просто и доступно объяснили!
Но тогда все же остается вопрос. Как же драйвера SCADA системы успевают считывать большие объемы данных по Modbus TCP?
Но тогда все же остается вопрос. Как же драйвера SCADA системы успевают считывать большие объемы данных по Modbus TCP?
-
- почётный участник форума
- Сообщения: 5807
- Зарегистрирован: 07 окт 2011, 09:12
- Имя: Гаско Вячеслав Эриевич
- Страна: Россия
- город/регион: Рязань
- Благодарил (а): 680 раз
- Поблагодарили: 856 раз
Чтение данных по Modbus TCP
Я никак не пойму, почему у Вас на запросы выходит аж три секунды? Это же не Serial RTU, а Ethernet.
Как Вы насчитали три секунды?
Как Вы насчитали три секунды?
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)
-
- осмотрелся
- Сообщения: 153
- Зарегистрирован: 04 фев 2014, 14:52
- Имя: Исаков Андрей Вячеславович
- Благодарил (а): 2 раза
Чтение данных по Modbus TCP
Я их в цикле опрашиваю последовательно. Возможно поэтому. Попробую асинхронно.
-
- здесь недавно
- Сообщения: 40
- Зарегистрирован: 30 окт 2009, 13:53
- Имя: ----
- Поблагодарили: 5 раз
Чтение данных по Modbus TCP
Сделал тест у себя. Чтение 9999 HOLDING регистров - это 80 запросов по 125 регистров. Мастер и слейв на одной машине - затраченное время 16 мс. Мастер и слейв на разных машинах в локальной сети - 35 мс.
PS. Для чистоты эксперимента: Windows 10 x64, i7 3.4 ГГц, память 32 Гб, сеть 100 Мбит/сек
PS. Для чистоты эксперимента: Windows 10 x64, i7 3.4 ГГц, память 32 Гб, сеть 100 Мбит/сек
-
- осмотрелся
- Сообщения: 153
- Зарегистрирован: 04 фев 2014, 14:52
- Имя: Исаков Андрей Вячеславович
- Благодарил (а): 2 раза
-
- здесь недавно
- Сообщения: 40
- Зарегистрирован: 30 окт 2009, 13:53
- Имя: ----
- Поблагодарили: 5 раз
Чтение данных по Modbus TCP
Синхронно. В цикле 80 раз подряд: записали запрос, ждем заголовок, читаем заголовок, ждем данные, читаем данные, разбираем ответ, перекладываем регистры из ответа в свой буфер, следующий диапазон.
-
- осмотрелся
- Сообщения: 153
- Зарегистрирован: 04 фев 2014, 14:52
- Имя: Исаков Андрей Вячеславович
- Благодарил (а): 2 раза
-
- осмотрелся
- Сообщения: 153
- Зарегистрирован: 04 фев 2014, 14:52
- Имя: Исаков Андрей Вячеславович
- Благодарил (а): 2 раза
Чтение данных по Modbus TCP
checker, а чем вы читали данные? Просто я по локальной сети с контроллера SCADAPack 330 Holding регистры быстрее, чем за 1,5 секунды не могу прочитать при всем желании.
-
- здесь недавно
- Сообщения: 21
- Зарегистрирован: 15 фев 2017, 19:30
- Имя: Викулов Евгений Сергееевич
- Страна: Россия
- город/регион: Кемерово
- Благодарил (а): 3 раза
- Поблагодарили: 2 раза
Чтение данных по Modbus TCP
Время ответа и впрямь из ряда вон. Самое медленное, что я видел - это ответ от BN 3500/92, порядка 20 мс на 100 регистров. Прежде чем пенять на контроллер, попробуйте посмотреть на трафик любым сетевым снифером - может "бутылочное горлышко" не в нём, а в клиенте
-
- эксперт
- Сообщения: 1151
- Зарегистрирован: 25 июл 2008, 10:06
- Имя: Леонид
- Страна: РФ
- Благодарил (а): 49 раз
- Поблагодарили: 135 раз
Чтение данных по Modbus TCP
Обычно ПЛК отвечает в конце цикла сканирования. И количество запросов за скан контроллера ограничено.
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.
-
- почётный участник форума
- Сообщения: 5807
- Зарегистрирован: 07 окт 2011, 09:12
- Имя: Гаско Вячеслав Эриевич
- Страна: Россия
- город/регион: Рязань
- Благодарил (а): 680 раз
- Поблагодарили: 856 раз
Чтение данных по Modbus TCP
Это зависит от наличия коммуникационного сопроцессора и, разумеется, от самой операционки на борту ПЛК.
Кстати, коммуникационные возможности являются одним из отличий PAC от PLC.
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)
-
- здесь недавно
- Сообщения: 40
- Зарегистрирован: 30 окт 2009, 13:53
- Имя: ----
- Поблагодарили: 5 раз
Чтение данных по Modbus TCP
Это скорость работы драйвера в нашей SCADA системе Каскад-САУ 4.0. В качестве сервера выступал сервер Modbus TCP из состава той же Каскад-САУ 4.0. Если модератор не сочтет за рекламу, то могу дать прямую ссылку на скачивание, чтобы попробовать. Или можете найти сами в файловом архиве на сайте из моих контактных данных.Andrey 2014 писал(а):checker, а чем вы читали данные? Просто я по локальной сети с контроллера SCADAPack 330 Holding регистры быстрее, чем за 1,5 секунды не могу прочитать при всем желании.
Думаю, не совсем корректно мерить контроллер SCADAPack 330 32 МГц c обычным компьютером. А вот с другими контроллерами можно. Сделал сейчас еще тест: взял наш контроллер BCE-5 180 МГц, работает под управлением рантайма от Каскад-САУ 4.0. С него чтение 1000 HOLDING регистров занимает те же 30 мс.
-
- осмотрелся
- Сообщения: 153
- Зарегистрирован: 04 фев 2014, 14:52
- Имя: Исаков Андрей Вячеславович
- Благодарил (а): 2 раза
Чтение данных по Modbus TCP
ну, я то читаю 10000 регистров, то есть на 100 если умножить, примерно 2 секунды выходит будет читать с этого контроллера.
1000 регистров читает примерно за 120-150 мс, но у вас процессор в 5,5 раз быстрее. Или это не влияет?
-
- здесь недавно
- Сообщения: 40
- Зарегистрирован: 30 окт 2009, 13:53
- Имя: ----
- Поблагодарили: 5 раз
Чтение данных по Modbus TCP
Конечно, влияет. У нас рантайм на контроллере работает под управлением ОСРВ eCos и параллельно в несколько потоков опрашивает устройства ввода, исполняет программы пользователя, отправляет свои данные на другие узлы по внутреннему протоколу, отвечает на запросы Modbus TCP и т.д. А процессор на все один, и если бы он был не 180 МГц, а 32 МГц, то на Modbus TCP оставалось меньше времени, а, следовательно, контроллер бы банально подтормаживал с ответами, увеличивая суммарное время опросаAndrey 2014 писал(а):1000 регистров читает примерно за 120-150 мс, но у вас процессор в 5,5 раз быстрее. Или это не влияет?
-
- администратор
- Сообщения: 18827
- Зарегистрирован: 17 июн 2008, 16:01
- Имя: Евгений свет Брониславович
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 989 раз
- Поблагодарили: 1872 раза
Чтение данных по Modbus TCP
А нельзя так переконфигурировать адресное пространство, чтобы нужные для опроса данные сложить в соседние регистры? Мы так делаем, это существенно ускоряет обмен особенно на медленных интерфейсах.
Зависит от устройств, понимаю. Может стОит посмотреть на них внимательнее: можно ли так сделать?
По вопросам работы Форума можно обратиться по этим контактам.
-
- осмотрелся
- Сообщения: 153
- Зарегистрирован: 04 фев 2014, 14:52
- Имя: Исаков Андрей Вячеславович
- Благодарил (а): 2 раза
Чтение данных по Modbus TCP
То есть, в принципе, нормально, что скорость опроса такая низкая на scadapack?
Можно конечно, но я то пишу библиотеку на шарпе для того, чтобы таскать данные из контроллера. Чтобы взял любой контроллер (даже запрограммированный неизвестными мне людьми) и прочитал данные по карте сигналов. То есть частный случай - это когда все хорошо и регистры последовательно занимают адреса, но ведь есть люди, которые любят разбросать данные, как носки по всей квартире, вот для таких случаев я и думал, что будет проще прочитать все регистры, а потом нужные уже вытащить.
-
- здесь недавно
- Сообщения: 40
- Зарегистрирован: 30 окт 2009, 13:53
- Имя: ----
- Поблагодарили: 5 раз
Чтение данных по Modbus TCP
Это вопрос к разработчикам SCADAPack. Если и них главное - опрос блоков ввода-вывода и алгоритмы, а Modbus TCP идет в нагрузку с низким приоритетом по остаточному принципу - тогда это нормально. А может у них сам сервер Modbus TCP плохо написан - тогда не нормально.Andrey 2014 писал(а):То есть, в принципе, нормально, что скорость опроса такая низкая на scadapack?
-
- осмотрелся
- Сообщения: 153
- Зарегистрирован: 04 фев 2014, 14:52
- Имя: Исаков Андрей Вячеславович
- Благодарил (а): 2 раза
Чтение данных по Modbus TCP
checker, а если я вам дам скомпилированную программку, можете проверить с какой скоростью будет читаться на вашем контроллере? Если боитесь вирусов, то просто исходник могу дать, компилировать в Visual Studio 2015.
-
- здесь недавно
- Сообщения: 40
- Зарегистрирован: 30 окт 2009, 13:53
- Имя: ----
- Поблагодарили: 5 раз
Чтение данных по Modbus TCP
Поправка к тесту контроллера BCE-5 выше: опрос 10000 HOLDING регистров за 80 запросов занимает 170 мс.