Преобразование протоколов Modbus
Протокол Modbus, базирующийся на архитектуре ведущий-ведомый, получил широкое распространение в промышленной автоматизации. Существует два основных формата: Modbus RTU и его модифицированная версия — Modbus TCP. Функционал обоих протоколов одинаков, основные же различия между ними заключаются в следующем:
- Протокол Modbus RTU использует последовательные линии связи (RS-232 или RS-485), в то время как Modbus TCP работает в сетях Ethernet.
- Пакет данных протокола Modbus TCP применяет дополнительный заголовок для TCP-соединения.
Рассмотрим несколько ситуаций, которые могут возникнуть при преобразовании протоколов Modbus.
Ситуация № 1
На рынке есть много производителей SCADA с разными возможностями поддержки драйверов Modbus. Если вы сомневаетесь, нужен ли вам специальный преобразователь протоколов или достаточно иметь сервер последовательных устройств, прежде всего необходимо определить, какой драйвер Modbus на хосте SCADA вы хотите использовать.
Существует четыре возможных варианта:
- хост SCADA с драйвером Modbus TCP (рис. 1);
- хост SCADA с драйвером Modbus RTU — со встроенным последовательным портом (рис. 2);
- хост SCADA с драйвером Modbus RTU — без встроенного последовательного порта (рис. 3);
- хост SCADA с драйвером «Инкапсуляция Ethernet» (рис. 4).
Хост SCADA с драйвером Modbus TCP
Для данного варианта необходим преобразователь протоколов. Можно воспользоваться протоколом Modbus TCP для связи с устройствами Modbus RTU через шлюз. На рынке устройств автоматизации доступно много шлюзов Modbus, которые обеспечивают подключение через Modbus TCP для ведомых устройств Modbus TCP. Когда шлюз получает запрос Modbus TCP, он преобразует пакет в Modbus RTU и немедленно посылает его к устройствам Modbus RTU.
Хост SCADA с драйвером Modbus RTU — со встроенным последовательным портом
Этот вариант подходит, если требуется просто подключить имеющийся хост SCADA и устройства Modbus RTU к сети Ethernet. Если хост SCADA оборудован последовательным портом, то с помощью пары шлюзов не трудно решить данную проблему. Как показано на схеме сети, шлюз может преобразовывать пакет Modbus RTU в Modbus TCP и обратно. Если встроенный последовательный порт отсутствует, такое решение не подходит и следует воспользоваться вариантом 3.
Хост SCADA с драйвером Modbus RTU — без встроенного последовательного порта
Если вам постоянно необходимы имеющиеся программы и устройства SCADA, но ваш хост SCADA не оснащен последовательным портом, используйте сервер последовательных устройств для создания виртуального COM-порта. Таким образом можно получить доступ к удаленным последовательным устройствам через сервер, причем функциональность будет соответствовать нативному COM-порту.
Для создания «виртуального COM-порта» сервер последовательных устройств установит драйвер виртуального COM-порта на ваш хост SCADA. Чтобы активировать этот порт, установите сервер последовательных устройств в режим виртуального COM-порта. Все данные, передаваемые через него, будут отправляться на удаленный последовательный порт сервера последовательных устройств. Поскольку с точки зрения ОС и SCADA виртуальный COM идентичен нативному, то запрос Modbus RTU можно отправить на него напрямую.
Хост 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. В подобной ситуации обеспечить резервирование сети (рис. 5) с помощью сервера последовательных устройств довольно сложно, так как многие серверы не поддерживают несколько ведущих устройств, однако применение шлюзов не вызовет никаких проблем.
- Одно соединение для нескольких устройств Modbus RTU
Иногда для опроса нескольких устройств Modbus RTU, подключенных к разным последовательным портам (рис. 6), необходимо одно соединение на хосте SCADA. Шлюз представляется единственным решением, способным реализовать такой механизм маршрутизации. Шлюзы с несколькими последовательными портами можно настроить, чтобы они отправляли запрос Modbus на соответствующий последовательный порт с учетом уникальных идентификаторов ведомых устройств.
Сервер последовательных устройств не может справиться со столь сложной задачей.
- Одновременный доступ к устройству со старого контроллера Modbus RTU и новой Modbus TCP SCADA
Хотя протокол Ethernet позволяет легко настроить удаленный доступ, иногда требуется сохранить существующие локальные соединения с контроллером или HMI. Проблема состоит в том, что последовательный порт на устройстве уже подключен к шлюзу, а значит, последовательный порт для подключения HMI отсутствует. Для решения этой проблемы некоторые шлюзы оборудованы функцией Serial Redirector. Эта система очень напоминает маршрутизатор, поскольку шлюз может передавать запрос между различными последовательными портами на основе идентификатора ведомого устройства (рис. 7).
Вывод
Существует много вариантов преобразования Modbus между последовательным интерфейсом и Ethernet. Хотя в этом случае можно применить такой простой способ, как прозрачная передача данных между последовательными и Ethernet-портами, при работе с промышленными протоколами, например с Modbus, специальный шлюз подходит гораздо лучше. Использование такого шлюза может потребовать солидных первоначальных инвестиций, зато обеспечивает более стабильную связь в долгосрочной перспективе, и шлюз способен распознавать пакеты Modbus для правильной обработки.
Ситуация № 2
Часто к разным последовательным портам шлюза подсоединено несколько устройств Modbus RTU, вот почему определение архитектуры подключения TCP становится довольно трудной задачей. Большинство шлюзов обеспечивает гибкие настройки подключения TCP для доступа к нескольким устройствам Modbus RTU, подсоединенным к разным последовательным портам шлюза.
Существует три различных метода, основанных на механизме маршрутизации:
- подключение последовательного порта к уникальному TCP-порту;
- подключение последовательного порта к уникальному IP-адресу;
- использование таблицы маршрутизации.
Рассмотрим их:
- Подключение последовательного порта к уникальному TCP-порту.
Наиболее популярный метод планирования топологии шлюза. В конфигурации шлюза каждый последовательный порт будет подключен к отдельному TCP-порту (рис. 8).
Например, 4001 — последовательный порт 1, 4002 — последовательный порт 2 и т. д. Если вы хотите подключить устройства Modbus RTU к последовательному порту 1, установите соединение Modbus TCP с 4001. Шлюз будет передавать пакеты Modbus TCP между TCP-портом 4001 и последовательным портом 1.
В этой топологии драйвер SCADA должен создать несколько соединений Modbus TCP.
- Подключение последовательного порта к уникальному IP-адресу
Этот вариант очень похож на вариант 1, но для идентификации последовательных портов шлюз использует различные IP-адреса (рис. 9).
Например, 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.
- Использование таблицы маршрутизации
В данной топологии для связи с несколькими устройствами предусмотрена маршрутизация (рис. 10). Чтобы запрос передавался к правильному последовательному порту, необходимо верно настроить шлюз и направление маршрутизации. Например, последовательный порт 1 обрабатывает все пакеты Modbus, которые имеют идентификаторы ведомых устройств от 1 до 10, последовательный порт 2 — идентификаторы от 11 до 20 и т. д.
Поскольку в топологии используется только одно соединение, связь будет медленнее, чем в вариантах 1 и 2. Тем не менее при наличии бюджетных и технических ограничений одно соединение может оказаться подходящим выбором, если обеспечивается достаточная производительность.
Примечание. Если вы подключите несколько устройств к одному последовательному порту или привяжете несколько последовательных портов к одному TCP-соединению, время опроса Modbus увеличится. Для повышения скорости опроса требуется больше TCP-соединений, поэтому необходимо учитывать возможности SCADA.
Ситуация № 3
В крупных проектах может быть несколько хостов для мониторинга за объектом либо может присутствовать резервный хост для удаленного мониторинга устройств с другой площадки. Таким образом, возникает задача обеспечения одновременного доступа нескольких ведущих устройств к устройствам Modbus RTU. Хотя шлюз может справиться с такой задачей, помните, что пропускная способность последовательного порта остается неизменной. Если через один последовательный порт поступает несколько запросов, то возможна задержка, поскольку шлюз обрабатывает первыми более ранние запросы. И если вы хотите разрешить нескольким ведущим устройствам одновременный доступ к устройству Modbus RTU, сначала необходимо подобрать подходящее время опроса.
Например, если один запрос занимает 100 мс, то пять подключений вызовут задержку не менее 100 мс ? (5–1) = 400 мс перед отправкой следующего запроса. Это означает, что цикл опроса каждого хоста SCADA должен составлять 400 мс (плюс некоторый допуск).
Впрочем, описанное выше решение не является единственным. Некоторые шлюзы поддерживают режим «агента», активно и постоянно получающего данные от подключенных устройств.
Обновляющиеся данные хранятся во внутренней памяти, которая используется для ответа на запросы хоста. Хотя это решение быстрее и эффективнее, полученные сведения не будут самыми актуальными.
Ситуация № 4
Для некоторых критически важных применений получение быстрого ответа от устройств является обязательным условием. Однако если используется множество ведомых устройств Modbus RTU, их опрос займет слишком продолжительное время. В таких случаях необходим шлюз-агент. Он должен активно получать данные от нескольких устройств Modbus RTU и помещать их в единый регистр во внутренней памяти. Таким образом с помощью одной команды чтения вы сможете получить все данные. Если у вас появились дополнительные вопросы, вы можете обратиться в Moxa Russia представительство Moxa Inc. в России и написать нам по адресу: russia@moxa.com.
Сервер последовательных устройств
Сервер последовательных устройств — это автономное устройство, оснащенное как минимум одним портом 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-порты становятся бесценным инструментом для подключения существующего оборудования промышленной автоматизации.
Прозрачный шлюз
Прозрачный шлюз (рис. 11) — основной метод использования шлюза Modbus. В связи с тем что протоколы Modbus RTU и Modbus TCP имеют тот же PDU (блок данных), а разница заключается лишь в заголовке, шлюз может с легкостью передавать данные между такими устройствами. Соответственно, когда шлюз получает пакет Modbus TCP из сети Ethernet, он может просто заменить поле адреса согласно требованиям Modbus RTU и сразу же отправить пакет на последовательный порт. Когда шлюз получает ответ от устройства Modbus RTU, он ответит клиенту Modbus TCP.
Шлюз-агент
Шлюз-агент (рис. 12) — другой метод применения шлюза Modbus для передачи данных между устройствами Modbus TCP и Modbus RTU. Шлюз-агент оснащен собственной внутренней памятью для временного хранения данных и непрерывно опрашивает подключенные устройства. При получении запроса от драйвера SCADA шлюз использует хранящиеся во внутренней памяти данные для ответа, а потому работает в качестве агента для активного опроса устройств. Эта функция может быть использована для преобразования протоколов, если:
-
Два протокола используют разную структуру пакетов. Например, PROFIBUS и Modbus, Ethernet/IP, PROFINET и т. д.
-
Два протокола используют разное время циклов. Некоторые протоколы, например PROFIBUS, PROFINET и Ethernet/IP, обмениваются данными в течение очень коротких временных циклов, в которые не может уложиться прозрачный шлюз.