Протокол Modbus широко используется при автоматизации производства, многие устройства поддерживают протокол передачи данных Modbus RTU, использующий последовательный интерфейс. Обычно устройства имеют интерфейс RS-232 или RS-485 с разъемом DB-9 или клеммной колодкой. Устройства Modbus RTU легко внедрять и недорого обслуживать. Именно поэтому протокол Modbus RTU стал настолько популярным. Сегодня все больше и больше промышленных устройств начинают поддерживать стандарт Ethernet, т.к. сложность и масштабы сетей повышаются. Многие системы уже работают через Modbus TCP с использованием Ethernet, например, SCADA. В результате, возникают проблемы сопряжения между протоколами Modbus RTU и Modbus TCP. Приведенные ниже часто задаваемые вопросы и ответы на них призваны помочь вам выявить и предотвратить частые проблемы преобразования протокола Modbus.
Перечень часто задаваемых вопросов:
- Нужен ли мне специальный преобразователь протоколов для подключения устройств с последовательным интерфейсом Modbus RTU к сети Ethernet? Достаточно ли сервера последовательных устройств?
- Если к разным последовательным портам шлюза подключено несколько устройств Modbus RTU, какова должна быть архитектура подключения TCP? Можно ли использовать одно подключение или требуется отдельное соединение для каждого последовательного порта?
- Как с помощью одного шлюза несколько хостов SCADA могут получить доступ к одним и тем же устройствам Modbus RTU одновременно?
- У меня есть два рабочих ведущих устройства Modbus (PLC или HMI). Как мне организовать обмен данными между ними?
- У меня есть несколько устройств Modbus RTU, которые нужно опросить. Я могу использовать несколько команд Modbus, чтобы получить данные регистров, но это занимает слишком много времени. Может ли шлюз активно получать данные и объединять их в единый регистр, чтобы я мог получить все данные с помощью одной команды Modbus?
Нужен ли мне специальный преобразователь протоколов для подключения устройств с последовательным интерфейсом Modbus RTU к сети Ethernet? Достаточно ли сервера последовательных устройств?
Прежде всего необходимо определить, какой драйвер Modbus на хосте SCADA вы хотите использовать. Существует четыре возможных варианта:
- хост SCADA с драйвером Modbus TCP
- хост SCADA с драйвером Modbus RTU — со встроенным последовательным портом
- хост SCADA с драйвером Modbus RTU — без встроенного последовательного порта
- хост SCADA с драйвером «Инкапсуляция Ethernet»
Вариант 1: Хост SCADA с драйвером Modbus TCP
Для данного варианта необходим преобразователь протоколов. Вы можете использовать протокол Modbus TCP для связи с устройствами Modbus RTU через шлюз.
На рынке устройств автоматизации доступно много «шлюзов Modbus», которые обеспечивают подключение через Modbus TCP для ведомых устройств Modbus TCP. Когда шлюз получает запрос Modbus TCP, он преобразует пакет в Modbus RTU и немедленно посылает его к устройствам Modbus RTU.
Вариант 2: Хост SCADA с драйвером Modbus RTU — со встроенным последовательным портом
Этот вариант подходит, если необходимо просто подключить существующий хост SCADA и устройства Modbus RTU к сети Ethernet. Если ваш хост SCADA оборудован последовательным портом, то с помощью пары шлюзов можно решить данную проблему.
Как показано на схеме сети, шлюз может преобразовывать пакет Modbus RTU в Modbus TCP и обратно. Если встроенный последовательный порт отсутствует, данное решение вам не подходит, воспользуйтесь вариантом 3.
Вариант 3: Хост SCADA с драйвером Modbus RTU — без встроенного последовательного порта
Если вы хотите пользоваться имеющимися программами и устройствами SCADA, но ваш хост SCADA не оснащен последовательным портом, используйте сервер последовательных устройств для создания виртуального COM-порта. Так вы сможете получить доступ к удаленным последовательным устройствам через сервер, причем функциональность будет соответствовать реальному COM-порту.
Для создания «виртуального COM-порта» сервер последовательных устройств установит драйвер виртуального COM-порта на ваш хост SCADA. Чтобы активировать этот порт, установите сервер последовательных устройств в режим виртуального COM-порта. Все данные, передаваемые через него, будут отправляться на удаленный последовательный порт сервера последовательных устройств. Так как с точки зрения ОС и SCADA виртуальный COM идентичен реальному, вы можете отправить запрос Modbus RTU на него напрямую.
Вариант 4: Хост SCADA с драйвером «Инкапсуляция Ethernet»
Если ваш хост SCADA не оснащен последовательным портом, а вы не хотите устанавливать драйвер виртуального COM-порта, то вместо этого вы можете использовать драйвер «Инкапсуляция Ethernet». Обратите внимание, что программное обеспечение SCADA должно поддерживать тип соединения «Инкапсуляция Ethernet». Использование драйверов «Инкапсуляция Ethernet» рекомендуется при наличии углубленных знаний о последовательных протоколах и протоколах TCP/IP.
Сервер последовательных устройств необходимо перевести в режим «Raw Socket» или «туннелирования», в котором при отправке SCADA пакетов Modbus RTU на устройства соединение между хостом и сервером последовательных устройств осуществляется через прозрачный канал TCP/IP или UDP без преобразования протокола. Сервер последовательных устройств необходимо корректно настроить, т.к. протокол Modbus RTU определяет конец пакета на основе пауз в передаче. Если пакет Modbus RTU будет разделён на два или более пакетов TCP/IP или UDP, вы можете столкнуться с некоторыми проблемами. Если вы не можете правильно настроить передачу пакетов между последовательными каналами и сетями Ethernet, рекомендуется использовать вариант со шлюзом (2) или виртуальным COM-портом (3).
Хотя серверы последовательных устройств можно использовать для подключения устройств Modbus RTU к сети Ethernet, вариант со шлюзом (2) наиболее предпочтителен и удовлетворяет практически всем требованиям системы. Ваш хост должен поддерживать протокол Modbus TCP, но это редко вызывает проблемы, т.к. этот протокол очень популярен и широко распространен. Ниже описаны несколько ситуаций, в которых необходимо использовать представленный вариант со шлюзом:
Несколько ведущих устройств или резервирование сети
Подключение через Ethernet позволяет не только пользоваться удаленным доступом, но также поддерживает несколько соединений. Большинство шлюзов поддерживают до 32 соединений, т.е. 32 хоста SCADA могут одновременно запрашивать данные у устройств Modbus RTU. В данной ситуации обеспечить резервирование сети с помощью сервера последовательных устройств довольно сложно, т.к. большинство серверов не поддерживает несколько ведущих устройств, с другой стороны, использование шлюзов не вызовет никаких проблем.
Одно соединение для нескольких устройств Modbus RTU
Иногда необходимо использовать одно соединение на хосте SCADA для опроса нескольких устройств Modbus RTU, подключенных к разным последовательным портам. Шлюз является единственным решением, которое может воплотить такой механизм маршрутизации. Шлюзы с несколькими последовательными портами можно настроить, чтобы они отправляли запрос Modbus на соответствующий последовательный порт с учетом уникальных идентификаторов ведомых устройств.
Север последовательных устройств не может справиться с такой сложной задачей.
Одновременный доступ к устройству со старого контроллера Modbus RTU и новой Modbus TCP SCADA
Хотя протокол Ethernet позволяет легко настроить удаленный доступ, иногда бывает необходимо сохранить существующие локальные соединения с контроллером или HMI. Проблема состоит в том, последовательный порт на устройстве уже подключен к шлюзу, поэтому последовательный порт для подключения HMI отсутствует. Для решения этой проблемы некоторые шлюзы оборудованы функцией «Serial Redirector». Эта система очень похожа на маршрутизатор тем, что шлюз может передавать запрос между различными последовательными портами на основе идентификатора ведомого устройства.
Вывод
Существует много вариантов преобразования Modbus между последовательным интерфейсом и Ethernet. Хотя в этом случае может использоваться такой простой вариант как прозрачная передача данных между последовательными и Ethernet портами, при работе с промышленными протоколами, например, Modbus, специальный шлюз подходит гораздо лучше. Использование такого шлюза может потребовать больших первоначальных инвестиций, но он обеспечивает более стабильную связь в долгосрочной перспективе и способен распознавать пакеты Modbus для правильной обработки.
Если к разным последовательным портам шлюза подключено несколько устройств Modbus RTU, какова должна быть архитектура подключения TCP? Можно ли использовать одно подключение или требуется отдельное соединение для каждого последовательного порта?
Большинство шлюзов обеспечивают гибкие настройки подключения TCP для доступа к нескольким устройствам Modbus RTU, подключенных к разным последовательным портам шлюза. Существует три различных метода, основанных на механизме маршрутизации:
- подключение последовательного порта к уникальному TCP-порту
- подключение последовательного порта к уникальному IP-адресу
- использование таблицы маршрутизации
Метод 1: Подключение последовательного порта к уникальному TCP-порту
Наиболее популярный метод планирования топологии шлюза. В конфигурации шлюза каждый последовательный порт будет подключен к отдельному TCP-порту. Например, 4001 — последовательный порт 1, 4002 — последовательный порт 2 и т.д. Если вы хотите подключить устройства Modbus RTU к последовательному порту 1, установите соединение Modbus TCP с 4001. Шлюз будет передавать пакеты Modbus TCP между TCP-портом 4001 и последовательным портом 1.
В этой топологии драйвер SCADA должен создать несколько соединений Modbus TCP.
Метод 2: Подключение последовательного порта к уникальному IP-адресу
Этот вариант очень похож на вариант 1, но для идентификации последовательных портов шлюз использует различные IP-адреса.
Например, 192.168.2.1 — к последовательному порту 1, 192.168.2.2 — к последовательному порту 2 и т.д. Если вы хотите подключить устройства Modbus RTU к последовательному порту 1, установите соединение Modbus TCP с 502. Шлюз будет передавать пакеты Modbus TCP между 192.168.2.1:502 и последовательным портом 1. В этой топологии драйвер SCADA также должен создать несколько соединений Modbus TCP. Хотя для топологии требуется несколько IP-адресов, некоторые клиенты Modbus TCP позволяют использовать только TCP-порт 502. В этом случае вариант 1 вам не подойдет, и придется использовать вариант 2.
Метод 3: Использование таблицы маршрутизации
В данной топологии для связи с несколькими устройствами используется маршрутизация. Чтобы запрос передавался к правильному последовательному порту, необходимо правильно настроить шлюз и направление маршрутизации. Например, последовательный порт 1 обрабатывает все пакеты Modbus, которые имеют идентификаторы ведомых устройств от 1 до 10, последовательный порт 2 — идентификаторы от 11 до 20 и т.д.
Т.к. в топологии используется только одно соединение, связь будет медленнее, чем варианты 1 и 2. Тем не менее, при наличии бюджетных и технических ограничений одно соединение может оказаться подходящим вариантом, если обеспечивается достаточная производительность.
Примечание:
Если вы подключите несколько устройств к одному последовательному порту или привяжете несколько последовательных портов к одному TCP-соединению, время опроса Modbus увеличится. Для увеличения скорости опроса требуется больше TCP-соединений, поэтому необходимо учитывать возможности SCADA.
Как с помощью одного шлюза несколько хостов SCADA могут получить доступ к одним и тем же устройствам Modbus RTU одновременно?
Хотя шлюз может справиться с такой задачей, помните, что пропускная способность последовательного порта остается неизменной. Если через один последовательный порт поступает несколько запросов, может возникнуть задержка, т.к. шлюз обрабатывает более ранние запросы первыми. Поэтому если вы хотите разрешить нескольким ведущим устройствам одновременный доступ к устройству Modbus RTU, сначала необходимо подобрать подходящее время опроса.
Тем не менее, описанное выше решение не является единственным. Некоторые шлюзы поддерживают режим «агента», активно и постоянно получающего данные от подключенных устройств.
Обновляющиеся данные хранятся во внутренней памяти, которая используется для ответа на запросы хоста. Хотя это решение является более быстрым и эффективным, полученные данные не будут самыми актуальными.
Например, если один запрос занимает 100 мс, то 5 подключений вызовут задержку не менее 100 мс х (5-1) = 400 мс перед отправкой следующего запроса. Это означает, что цикл опроса каждого хоста SCADA должен составлять 400 мс (плюс некоторый допуск).
У меня есть два рабочих ведущих устройства Modbus (PLC или HMI). Как мне организовать обмен данными между ними?
Для обмена данными между двумя ведущими устройствами Modbus необходим шлюз, который может поддерживать режим ведущее устройство–ведущее устройство (master-master). В этом режиме шлюз будет работать в качестве ведомого устройства для обеих сторон. Одно ведущее устройство может записывать данные во внутреннюю память шлюза, а другое — получать их, тем самым обеспечивая обмен. В зависимости от используемого шлюза вы можете обеспечить поддержку Modbus RTU и Modbus TCP для обеих сторон или поддержку Modbus RTU для одной и Modbus TCP — для другой.
У меня есть несколько устройств Modbus RTU, которые нужно опросить. Я могу использовать несколько команд Modbus, чтобы получить данные регистров, но это занимает слишком много времени. Может ли шлюз активно получать данные и объединять их в единый регистр, чтобы я мог получить все данные с помощью одной команды Modbus?
Для того, чтобы шлюз активно получал данные от нескольких устройств Modbus RTU и помещал их в единый регистр, шлюз-агент должен сохранять данные во внутренней памяти. Шлюз также должен по очереди опросить каждое устройство Modbus RTU. Все данные будут расположены в одном блоке во внутренней памяти шлюза, поэтому вы сможете получить их с помощью одной команды чтения.
Глоссарий
Сервер последовательных устройств
Сервер последовательных устройств — это автономное устройство, оснащенное, как минимум, одним портом Ethernet и одним или несколькими последовательными портами. Серверы последовательных устройств оснащаются встроенной сетевой операционной системой и позволяют компьютерам получить доступ к последовательным устройствам в сети. Они могут прозрачно передавать данные между последовательным интерфейсом и Ethernet, при этом соответственно преобразовывая их.
Современные серверы последовательных устройств также поддерживают функцию «виртуального COM-порта» для компьютеров, у которых нет дополнительного последовательного порта, преобразуя Ethernet-соединение в СОМ-порт. Помимо этих основных функций, более сложные серверы могут даже поддерживать протокол PPP по последовательным линиям связи или Telnet — в сетях Ethernet. Сервер последовательных устройств можно использовать для консольного управления сетевым и серверным оборудованием (поэтому некоторые производители называют его «консольным») или управления удаленными терминалами в старых банковских системах (поэтому иногда его называют «терминальным»).
Виртуальный COM-порт, драйвер виртуального COM-порта
Виртуальный COM-порт — это не реальный (т.е., не физический) COM-порт на компьютере. Вместо этого на компьютер под устанавливается драйвер виртуального COM-порта, полностью эмулирующий поведение локального COM-порта. Драйвер управляет портами на сервере последовательных устройств, который подключен по сети TCP/IP. Последовательный порт на удаленном сервере последовательных устройств будет функционировать так же, как локальный COM-порт. Виртуальный COM-порт привязывается к конкретному порту конкретного сервера последовательных устройств. Например, COM3 — это последовательный порт 1 на удаленном сервере последовательных устройств с IP-адресом 192.168.2.1. Поэтому при прохождении данных через этот порт они будут отправлены драйвером на «192.168.2.1@serial port 1» (192.168.2.1 на последовательный порт 1). Все запросы на этот виртуальный COM-порт будут перенаправлены на «192.168.2.1@serial port 1». Т.к. новые хост-компьютеры часто имеют недостаточное количество встроенных последовательных портов, виртуальные COM-порты являются бесценным инструментом для подключения существующего оборудования промышленной автоматизации.
Прозрачный шлюз
Прозрачный шлюз — это основной метод использования шлюза Modbus. Т.к. протоколы Modbus RTU и Modbus TCP имеют тот же PDU (блок данных), а разница заключается только в заголовке, шлюз может с легкостью передавать данные между такими устройствами. Таким образом, когда шлюз получает пакет Modbus TCP из сети Ethernet, он может просто заменить поле адреса в соответствии с требованиями Modbus RTU и сразу же отправить пакет на последовательный порт. Когда шлюз получает ответ от устройства Modbus RTU, он ответит клиенту Modbus TCP.
Шлюз-агент
Шлюз-агент — это другой метод использования шлюза Modbus для передачи данных между устройствами Modbus TCP и Modbus RTU. Шлюз-агент оснащен собственной внутренней памятью для временного хранения данных и непрерывно опрашивает подключенные устройства. При получении запроса от драйвера SCADA шлюз использует хранящиеся во внутренней памяти данные для ответа. Поэтому шлюз работает в качестве агента для активного опроса устройств. Эта функция может быть использована для преобразования протоколов, если:
- Два протокола используют разную структуру пакетов. Например, PROFIBUS и Modbus, Ethernet/IP, PROFINET и т.д.
- Два протокола используют разное время циклов. Некоторые протоколы, например, PROFIBUS, PROFINET и Ethernet/IP, обмениваются данными в течение очень коротких временных циклов, в которые не может уложиться прозрачный шлюз.