Для чего нужен modbus
Для чего нужен modbus
Modbus — коммуникационный протокол, основанный на архитектуре «клиент-сервер». Широко применяется в промышленности для организации связи между электронными устройствами. Может использовать для передачи данных последовательные линии связи RS-485, RS-422, RS-232, а также сети TCP/IP (Modbus TCP).
История
Modbus был разработан фирмой Modicon (в настоящее время принадлежит Schneider Electric) для использования в её контроллерах с программируемой логикой. Впервые спецификация протокола была опубликована в 1979 году. [1] Это был открытый стандарт, описывающий формат сообщений и способы их передачи в сети состоящей из различных электронных устройств.
Первоначально контроллеры MODICON использовали последовательный интерфейс RS-232. [1] Позднее стал применяться интерфейс RS-485, так как он обеспечивает более высокую надёжность, позволяет использовать более длинные линии связи и подключать к одной линии несколько устройств.
Введение
Modbus относится к протоколам прикладного уровня сетевой модели OSI. [3] Контроллеры на шине Modbus взаимодействуют, используя клиент-серверную модель, основанную на транзакциях, состоящих из запроса и ответа.
Обычно в сети есть только один клиент, так называемое, «главное» (англ. master) устройство, и несколько серверов — «подчиненных» (slaves) устройств. Главное устройство инициирует транзакции (передаёт запросы). Подчиненные устройства передают запрашиваемые главным устройством данные, или производят запрашиваемые действия. Главный может адресоваться индивидуально к подчиненному или инициировать передачу широковещательного сообщения для всех подчиненных устройств. Подчиненное устройство формирует сообщение и возвращает его в ответ на запрос, адресованный именно ему. При получении широковещательного запроса ответное сообщение не формируется.
Спецификация Modbus описывает структуру запросов и ответов. Их основа — элементарный пакет протокола, так называемый PDU (Protocol Data Unit). Структура PDU не зависит от типа линии связи и включает в себя код функции и поле данных. Код функции кодируется однобайтовым полем и может принимать значения в диапазоне 1. 127. Диапазон значений 128. 255 зарезервирован для кодов ошибок. Поле данных может быть переменной длины. Размер пакета PDU ограничен 253 байтами.
номер функции | данные | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 байт | N Категории кодов функций В действующей в настоящее время спецификации протокола определяются три категории кодов функций: Стандартные команды Их описание должно быть опубликовано и утверждено Modbus-IDA. Эта категория включает в себя как уже определенные, так и свободные в настоящее время коды. Пользовательские команды Два диапазона кодов (от 65 до 72 и от 100 до 110), для которых пользователь может реализовать произвольную функцию. При этом не гарантируется, что какое-то другое устройство не будет использовать тот же самый код для выполнения другой функции. Зарезервированные В эту категорию входят коды функций, не являющиеся стандартными, но уже используемые в устройствах, производимых различными компаниями. Это коды 9, 10, 13, 14, 41, 42, 90, 91, 125, 126 и 127. Модель данныхОдно из типичных применений протокола — чтение и запись данных в регистры контроллеров. Спецификация протокола определяет четыре таблицы данных:
Доступ к элементам в каждой таблице осуществляется с помощью 16-битного адреса, первой ячейке соответствует адрес 0. Таким образом, каждая таблица может содержать до 65536 элементов. Спецификация не определяет, что физически должны представлять собой элементы таблиц и по каким внутренним адресам устройства они должны быть доступны. Например, допустимо организовать перекрывающиеся таблицы, В этом случае команды работающие с дискретными данными и с 16-битными регистрами будут фактически обращаться к одним и тем же данным. Следует отметить, что со способом адресации данных связана определённая путаница. Modbus был первоначально разработан для контроллеров Modicon. В этих контроллерах для каждой из таблиц использовалась специальная нумерация. Например, первому регистру ввода соответствовал номер ячейки 30001, а первому регистру хранения — 40001. Таким образом, регистру хранения с адресом 107 в команде Modbus соответствовал регистр № 40108 контроллера. Хотя такое соответствие адресов больше не является частью стандарта, некоторые программные пакеты могут автоматически «корректировать» вводимые пользователем адреса, например, вычитая 40001 из адреса регистра хранения. Стандартные функции протокола ModbusЧтение данныхДля чтения значений из перечисленных выше таблиц данных используются функции с кодами 1—4 (шестнадцатеричные значения 0x01—0x04): Запрос состоит из адреса первого элемента таблицы, значение которого требуется прочитать, и количества считываемых элементов. Адрес и количество данных задаются 16-битными числами, старший байт каждого из них передается первым. В ответе передаются запрошенные данные. Количество байт данных зависит от количества запрошенных элементов. Перед данными передается один байт, значение которого равно количеству байт данных. Значения регистров хранения и регистров ввода передаются начиная с указанного адреса, по два байта на регистр, старший байт каждого регистра передаётся первым:
Значения флагов и дискретных входов передаются в упакованном виде: по одному биту на флаг. Единица означает включённое состояние, ноль — выключенное. Значения запрошенных флагов заполняют сначала первый байт, начиная с младшего бита, затем следующие байты, также от младшего бита к старшим. Младший бит первого байта данных содержит значение флага, указанного в поле «адрес». Если запрошено количество флагов, не кратное восьми, то значения лишних битов заполняются нулями:
Запись одного значенияКоманда состоит из адреса элемента (2 байта) и устанавливаемого значения (2 байта). Для регистра хранения значение является просто 16-битным словом. Для флагов значение 0xFF00 означает включённое состояние, 0x0000 — выключенное, другие значения недопустимы. Если команда выполнена успешно, ведомое устройство возвращает копию запроса. Запись нескольких значенийКоманда состоит из адреса элемента, количества изменяемых элементов, количества передаваемых байт устанавливаемых значений и самих устанавливаемых значений. Данные упаковываются так же, как в командах чтения данных. Ответ состоит из начального адреса и количества изменённых элементов. Ниже приведён пример команды ведущего устройства и ответа ведомого (для Modbus RTU). Как общаются машины: протокол ModbusБлагодаря универсальности и открытости, стандарт позволяет интегрировать оборудование разных производителей. Modbus используется для сбора показания с датчиков, управления реле и контроллерами, мониторинга, и т.д. В статье разберем реализации протокола Modbus, форматы данных, программное обеспечение для работы с протоколом. Попробуем на практике прочитать данные из устройства. История ModbusModbus был представлен в 1979 году компанией Modicon (ныне Schneider Electric). Это был открытый стандарт, работающий по интерфейсу RS-232. Позже появилась реализации протокола для интерфейсов RS-485 и Modbus TCP. Протокол быстро набрал популярность, и многие производители стали внедрять его в своих устройствах. Позже права на протокол были переданы некоммерческой организации Modbus Organization, которая до сегодняшнего дня владеет стандартом. В описании стандарта Modbus используются терминология, унаследованная от языков релейной логики. Так, например, некоторые регистры называются катушками (англ. coil). Физический уровеньЛогический уровень
Modbus ASCIIДанные кодируются символами из таблицы ASCII и передаются в шестнадцатеричном формате. Начало каждого пакета обозначается символом двоеточия, а конец — символами возврата каретки и переноса строки. Это позволяет использовать протокол на линиях с большими задержками и оборудовании с менее точными таймерами. Modbus RTUВ протоколе Modbus RTU данные кодируются в двоичный формат, и разделителем пакетов служит временной интервал. Этот протокол критичен к задержкам и не может работать, например, на модемных линиях. При этом, накладные расходы на передачу данных меньше, чем в Modbus ASCII, так как длина сообщений меньше. Modbus TCPСтруктура пакетов схожа с Modbus RTU, данные также кодируются в двоичный формат, и упаковываются в обычный TCP-пакет, для передачи по IP-сетям. Проверка целостности, используемая в Modbus RTU, не применяется, так как TCP уже имеет собственный механизм контроля целостности. Формат пакета
Все устройства Modbus взаимодействуют, следуя модели master-slave. Запросы может инициировать только master-устройство, slave-устройства могут только отвечать на запросы, и не могут самостоятельно начинать передачу данных. В зависимости от реализации протокола, заголовки пакета различаются. Вот основные составляющие пакета, которые важно знать: ADU (Application Data Unit) — пакет Modbus целиком, со всеми заголовками, PDU, контрольной суммой, адресом и маркерами. Отличается, в зависимости от реализации протокола. PDU (protocol data unit) — основная часть пакета, одинаковая для всех реализаций протокола. Содержит сам payload. Адрес устройства — адрес получателя, то есть slave-устройства. В одном сегменте Modbus-сети могут находится до 247 устройств. Только slave-устройства имеют различающиеся адреса, master-устройство не имеет адреса. Адрес «0» используется для широковещательных запросов от master, при этом, slave-устройства не могут отвечать на эти широковещательные пакеты. Контрольная сумма — алгоритмы проверки целостности пакетов. В Мodbus RTU и ASCII используется 2 байта контрольной суммы. В Modbus RTU применяется алгоритм CRC16, в Modbus ASCII — более простой и менее надежный LRC8. В Modbus TCP контрольная сумма не добавляется в ADU, так как целостность проверяется на уровне TCP. Мы не будем разбирать дополнительные заголовки, специфичные для каждой отдельной реализации протокола, так как это не имеет существенного значения при работе с протоколом на прикладном уровне. Регистры и функции ModbusВ упрощенном виде, структура запросов Modbus состоит из кода функции (чтение/запись), и данных, которые нужно считать или записать. При этом, коды функции различаются для разных типов данных. Разберем, какие бывают регистры, и функции для работы с ними. Примеры работыДля примера работы с протоколом Modbus TCP воспользуемся максимально простой консольной утилитой modbus-cli, написанной на языке Ruby. Она позволяет легко читать и писать данные в регистры Modbus. Попробуем прочесть состояние счетчиков переданных пакетов на промышленном коммутаторе Advantech EKI-5524SSI. Для начала необходимо определить адреса регистров, хранящие нужную информацию, для этого заглянем в документацию устройства. Описание регистров находятся в разделе «Modbus Mapping Table»:
Видно, что значение переданных пакетов для одного порта хранится в четырех регистрах, и для первого порта это регистры с 38193 по 38197. Также дано описание формата хранения данных, из которого следует, что целое число переданных пакетов хранится шестнадцатеричном формате, и значение 11223344 пакетов будет записано как 0xAB4130, справа налево. read — команда чтения. Программа сама понимает, какую конкретно команду чтения использовать в зависимости от адреса регистра, в нашем случае будет использована команда «04», для чтения 16-битных регистров. 192.168.0.17 — IP-адрес устройства. 38193 — начальный адрес регистра. 4 — смещение относительно начального адреса. Мы читаем четыре регистра для порта 1, как следует из даташита. Получаем ответ, содержащий значения четырех регистров. Видим, что число пакетов невелико: 0x3459, то есть 13401, — коммутатор был включен недавно. Недостатки протокола ModbusСправедливости ради, стоит упомянуть и о недостатках протокола. Так как он разрабатывался более 40 лет назад, когда производительность процессоров была существенно ниже и протоколы разрабатывались без учета защиты данных, он имеет рад минусов: Оборудование с поддержкой ModbusAdvantech предлагает широкий спектр промышленного оборудования с поддержкой протокола Modbus для любых задач: автоматизации, управления, сбора и передачи данных. ADAM-6000 и WISE-4000 — модули удаленного ввода-вывода EKI-1200 — Modbus-шлюзы для преобразования интерфейсов
APAX-5000, ADAM-3600, WISE-5000 — контроллеры автоматизацииКонтроллеры поддерживают функции Modbus RTU в качестве slave/master и клиента/сервера Modbus TCP. Примеры примененияСистема мониторинга теплицРешение Advantech для мониторинга интегрирует устройства TPC-1070H, ADAM-6024, ADAM-6050, ADAM-6060 и программное обеспечение WebAccess в машинном шкафу рядом с сельскохозяйственными угодьями. Соединяясь с различными чувствительными устройствами, модули ADAM-6000 могут в режиме реального времени получать данные об окружающей среде и контролировать переключение оборудования, чтобы гарантировать, что теплица находится в оптимальной среде для роста растений. Благодаря особой функции Advantech — графической логике условий (GCL), пользователи могут определять свои собственные правила логики управления и загружать эти правила в модули ввода / вывода Ethernet ADAM-6000, а затем модули автоматически выполняют логические правила, как автономные модули. контроллер. Еще одна особенность — Peer-to-Peer (P2P) использует наиболее открытую и гибкую сеть Ethernet, чтобы не только упростить процесс внедрения без контроллера, но и сэкономить затраты на аппаратное оборудование. Все полученные данные затем передаются через Ethernet на компьютер с сенсорной панелью TPC-1070H. Благодаря системе охлаждения без вентилятора и передней панели, соответствующей стандарту IP65, TPC-1070H представляет собой прочную и компактную конструкцию, подходящую для изменяемой операционной среды, а его мощные вычислительные возможности способны обрабатывать большие объемы данных. Для управления устройствами Advantech WebAccess позволяет инженерам или менеджерам просматривать, контролировать и настраивать систему мониторинга через интрасеть или Интернет с помощью обычного веб-браузера с любого устройства, включая планшеты и смартфоны. Мониторинг системы нагрева воды солнечной энергиейИнжиниринговая компания должна была иметь возможность контролировать количество солнечной энергии, температуры и расход воды в системе нагрева воды на солнечной энергии для бассейна олимпийских размеров, обеспечиваемого их недавно разработанной солнечной панелью. Они также должны были иметь возможность непосредственно отслеживать эти значения и их аварийные сигналы на ЖК-панелях и сохранять эти значения для дальнейшего использования. Модули Adam от Advantech предоставили заказчику решение, в котором использовались модули сбора данных, подключенные через RS485, и двухпроводная шина для передачи данных со всех датчиков. Эта системная архитектура имеет два основных преимущества: во-первых, она позволяет в любое время добавлять в систему большее количество датчиков модулей сбора данных, и, во-вторых, очень легко добавлять дополнительные метки в программное обеспечение для мониторинга и записи этих значений на ПК. Что такое протокол Modbus и где он используетсяВ 1979 году компания Modicon представила протокол, который мог бы помочь собирать данные с оборудования. Новая разработка пришлась по нраву производителям промышленных машин. Поэтому вскоре на свет появились две реализации протокола — ModBus TCP и ModBus RS-485, подходящих для популярных интерфейсов. Где используется протокол
Компания AdvanTech объединила несколько устройств и одно программное обеспечение WebAccess, а затем разместила компоненты в теплицах сельскохозяйственного угодья. Все данные, благодаря protocol Modbus, передаются на ПК. Прочная и компактная комбинация датчиков отлично переносит влажность в теплицах. А инженеры настраивают работу через экран планшета или смартфона. Еще один вариант, как работает протокол — во время контроля за нагревом воды солнечными лучами. Модули сбора данных подключились в бассейне, с помощью протокола информация с нескольких датчиков объединялась и передавалась на компьютер. Вся система подключалась через стандартный интерфейс RS-485. При такой схеме инженеры добавляют или убирают дополнительные сканеры, а в саму программу — дополнительные метки. Стандартные функции протокола ModbusИспользуются регистры от 1 до 123. Типы данных ModBuСуществует несколько видов данных, которые способны передавать устройства в рамках команды от Master. Для чтения используются функции под кодовыми обозначениями 1–4. Чтобы разобраться, как происходит запрос и получение ответа, необходима эта таблица с типами информации: Ведущее устройство отправляет запрос, состоящий из адреса (строка левой колонки), количества элементов. Оба значения задаются числами — до 16 бит. В ответ устройство получает такое же числовое количество данных. Если необходимы данные, которые можно читать и записывать, то используются функции 5 и 6. Команда состоит из адреса и значения. Есть возможность одновременно записать несколько элементов, команда строится по тому же принципу, но к адресу и значениям добавляется количество изменяемых характеристик. Структура обмена данными по ModBusВ узле Modbus обязательно присутствуют четыре устройства. Сетевой обмен данными состоит из запросов одного из них и ответов на эти запросы.
Модель данных ModbusНесмотря на то что один из регистров доступен для чтения и для записи, в большинстве устройств они считаются единым целым. Два варианта протоколаСегодня существуют два варианта протокола, которые используются с одинаковой частотой. Протокол ModBus RTU считается более простым и компактным. В основе — только двоичная связь. Передача данных невозможна без циклической контрольной суммы избыточности: с ее помощью мастер определяет, есть ли проблемы и каков их характер. Некоторые мастера предпочитают использовать более редкую, но подробную версию — ASCII. Вариант протокола используют на тех устройствах и оборудовании, которые не поддерживают более распространенный ModBus RS 484. Из-за этого ASCII является менее безопасным протоколом. В основе — сложное шестнадцатеричное кодирование данных. Многие программисты объединяют RTU и ASCII в одну группу, ведь они отличаются лишь типом кодирования и уровнем распространенности. Поэтому в качестве второго варианта протокола принято называть TCP. Описание протокола Modbus RTUКлассический, слегка архаичный RTU используется для стандартных интерфейсов — RS-232, Modbus RS-485. Особенность системы заключается в строгой иерархичности: на каждом шлейфе по протоколу один аппарат назначается главным (Master), все остальные — ведомыми (Slaves). Количество ведомых может доходить до 32, но оптимально подключать в одну связку максимум 20. Какие бывают команды Modbus RTU?Команды от Мастера можно разделить на три группы — чтение данных, запись одного дискретного выхода и запись нескольких дискретных выходов. Контроль ошибок в протоколе Modbus RTUЧтобы их обнаружить, предусмотрены специальные алгоритмы действий. Для обнаружения искажений используется фрейм слов. В RTU каждое отдельное сообщение начинается и заканчивается интервалом тишины — временем, которое сопоставимо с передачей 3,5 символов на текущей скорости. Фрейм передается непрерывно и отслеживает, соответствует ли длительность интервалов положенному значению. Если он короче или длиннее, фрейм игнорируется устройством. При отсутствии ответа отправляется отчет об ошибке. Описание протокола Modbus TCP
В отличие от RTU, TCP устроено по иному принципу — «клиент-сервер». Чтобы обменяться данными, образуется связь между клиентом и сервером. Client-ом становится Мастер, остальные Ведомые превращаются в сервер. Меняется порядок передачи данных: теперь не Мастер задает команду, а пользователь открывает сеанс связи. Поэтому широкоформатного общения (от одного источника ко всем устройствам) в этом типе протокола нет. Из-за более сложной системы время передачи данных увеличивается. Зато таким способом синхронизируют даже далеко расположенные устройства — по Wi-Fi. Типы команд Modbus TCPПроцесс соединения двух устройств отличается, но команды, которые задает Клиент Серверу, не отличаются от стандартных. Можно прочесть, записать один регистр или несколько. Как и RTU, TCP обозначает каждую команду кодом: 01-06, 15-16. Программы для работы с протоколом ModbusНе такие популярные, но все же используемые бесплатные приложения и библиотеки для работы — FreeSCADA, PortMon, PeakHMI, QModMaster. Требования к ПО для работы с Modbus-устройствами в режиме мастераКроме того, приложение должно быть лицензированным. Разработчик должен сопровождать софт и вовремя предоставлять обновление программы. Наладка систем автоматизации, использующих Modbus устройстваМожет потребоваться дополнительная аппаратура, инструмент Modbus Roll для одновременного опроса нескольких устройств или иные модули Modbus. Реже возникают сложности с подключением в сеть, работающую по отличному от ModBus RTU протоколу. Для наладки требуется OPC сервер и Modbus Roll. Modbus MapПротокол обязательно снабжается ModBus Map — документацией, в которой подробно описаны допустимые регистры, адреса, команды, значения и способы доступа. Существует два варианта — устройство поступает к оператору с уже четко сформулированным описанием регистров. Это описание находится в печатной инструкции или иной документации. Но есть конфигурация, которая по умолчанию не предусмотрена: пользователь может настроить Modbus карту по своему усмотрению. Самый простой вариант настройки — соединение нескольких регистров в одну связку, чтобы в протоколе они считались одной командой. Связь и устройстваВ общей связке работают несколько устройств. Чтобы одно из них давало команды остальным, каждому аппарату присваивается уникальный номер, адрес. Обычно только Master может отправлять команды Slaves, однако в Ethernet любое устройство имеет возможность задать команду. Сегодня есть много модемов и шлюзов, которые разработаны специально под ModBus. Самые современные работают на базе проводной или беспроводной связи, сообщаются даже с помощью небольших сообщений типа SMS и используют пакетную радиосвязь GPRS. Оборудование с поддержкой ModbusПромышленное оборудование выпускается уже с поддержкой популярного протокола. Можно подобрать устройства для решения рабочих задач: сбора информации, передачи, управления или автоматизации. Модули удаленного ввода или вывода необходимы для дистанционного управления периферией. Помогут во время сбора информации в режиме Master/Slave. Устройство подключается как к контроллеру, так и напрямую к серверу. Шлюзы используются для преобразования интерфейсов, объединения в одну сеть устройств с разными протоколами и разъемами. Каждый шлюз имеет до 4-х интерфейсов: 232, 422, 485, Ethernet. Контроллеры автоматизации помогут переключиться из режима Slaves-Master в режим Server-Client. Преимущества протокола ModbusКак и каждый протокол, Modbus (и RTU, и TCP) имеет ряд преимуществ и недостатков. Операторы выбирают этот протокол благодаря следующим достоинствам:
Modbus — протокол прикладного характера: данные передаются над физическим уровнем, связь используется в большинстве типов соединений. Недостатки протокола Modbus
Все «ведомые» устройства передают данные только по команде Master. Если необходимость в передаче данных возникает у ведомого устройства, то потребуется время: нужно дождаться, пока ведущий даст команду в порядке очередности. Из-за типа — Master and Slaves — протокол не сообщает информацию об исключениях. В то же время Ведущий должен получать информацию от Ведомых. Это нагружает систему, увеличивает время передачи данных с дочерних устройств к главному. А значит, ModBus становится неудобен в тех каналах, где скорость передачи низкая. Так как передача информации происходит непрерывно, это ограничивает типы устройств: то оборудование, что буферизует данные, уже не может быть использовано.
Так как он изобретен в 1979 году, численность типов данных ограничена тем количеством, которое было доступно 40 лет назад. Большие двоичные объекты просто не поддерживаются. Из-за неудобств от использования протокола отказываются компании, которым важно сохранить конфиденциальность данных. Протокол не защищает от сторонних команд, не санкционированных оператором. И не защищает полосу пропускания от перехвата.
|