Modbus, протокол: описание, сфера применения, достоинства и недостатки
Modbus — открытый протокол последовательной связи. Был разработан в 1979 году для использования с устройствами программируемого логического контроллера (PLC), в настоящее время широко используется для подключения многих типов промышленных электронных устройств, подключенных к различным типам сетей.
Наиболее широко используемый протокол в промышленной автоматизации (исключение — локальные предприятия). Modbus очень популярен. Это достаточно простое и понятное в использовании устройство со стандартной последовательной связью. В сети Modbus каждое устройство смотрит в сеть как набор катушек (бит) и регистров.
Мастер считывает и записывает эти катушки и регистры, используя очень простой и сжатый набор команд. Коммуникация движется только в одном направлении за раз.
Реализация протокола Modbus, установленная на практике, является очень краткой. Хотя есть двадцать основных команд, только некоторые из них действительно реализованы. Наиболее распространенными командами считаются считываемые катушки, записываемые катушки, считывание регистра, установка регистров. Небольшой набор команд — еще одна причина популярности протокола.
Протокол MODBUS
Modbus — протокол расширенного применения
Преобразователь протоколов широко используется по ряду причин:
- Modbus — протокол с открытым исходным кодом. Это означает, что он может быть включен в широкий диапазон типов устройств от любого поставщика оборудования.
- Использует простую структуру сообщений, что делает ее менее сложной для развертывания. Может потребовать всего несколько дней для реализации. Это явное конкурентное преимущество в сравнении с другими протоколами, которые могут потребовать месяцев для изучения и развертывания.
- Поддерживает последовательные или Ethernet-соединения.
- Используется с двумя типами последовательных соединений: RS-232 и RS-485. Некоторые версии протокола Modbus tcp также могут быть отправлены через Ethernet или TCP/IP. Эти сообщения Modbus упакованы как однобитовые или 16-битные пакеты слов.
Сетевой протокол Modbus не является частью физического уровня в сети. Связь передается над физическими уровнями, что позволяет использовать ее во многих различных типах сетей. Это свойство нефизического уровня делает Modbus протоколом прикладного характера.
Протокол передачи данных Modbus — это общий способ сбора данных из разных источников для просмотра операций, архивирования и устранения неполадок с центрального удаленного места. Он широко используется и является довольно простой технологией. В зависимости от приложения, более новый протокол может иметь больше преимуществ.
Как правило, ПК настроен на запуск таких программ, как Wonderware, Intellution или LabVIEW в одном месте для сбора данных из разных процессов по всему предприятию. Другое приложение предназначено для настройки удаленных контроллеров производственных процессов (ПЛК, Allen-Bradley, Siemens, PLCDirect и другие). Для реагирования на различные уровни или режимы, которые передаются с устройства.
Что такое Modbus и как он работает? — Перевод RealPars
Два варианта протокола
Существует два варианта протокола, которые проходят через последовательные соединения. Одним из них является протокол Modbus RTU. Описание этого варианта: оно более компактное, использует двоичную связь. В данном формате передача данных всегда сопровождается циклической контрольной суммой избыточности, которая используется для обнаружения проблем передачи.
Второй вариант — Modbus ASCII. Эта версия более подробная, использует шестнадцатеричное кодирование ASCII-данных, которое может быть прочитано операторами. Modbus ASCII является менее защищенным протоколом. Поскольку он менее эффективен, чем Modbus RTU, операторы должны использовать ASCII только для передачи данных на устройства, которые не поддерживают формат RTU. ASCII также может быть полезным, если сообщение RTU не может быть правильно применено.
Протокол Modbus для чайников
Modbus — это протокол последовательной связи, используемый для передачи информации по последовательным линиям между электронными устройствами. То, которое запрашивает информацию, называется ведущим (Master), а информация о поставке устройств — подчиненные устройства (Slaves). В стандартной сети Modbus есть один Master и до 247 Slaves, каждый из которых имеет уникальный подчиненный адрес от 1 до 247. Master может также записывать информацию в Slaves.
Для чего его используют?
Modbus является открытым протоколом. Это означает, что производители бесплатно могут встраивать его в свое оборудование. Он стал стандартным протоколом связи в промышленности, а в настоящее время является наиболее распространенным средством подключения промышленных электронных устройств. Он широко используется многими производителями во многих отраслях.
Modbus обычно используется для передачи сигналов от приборов и устройств управления обратно в главный контроллер или систему сбора данных, например, систему, которая измеряет температуру и влажность, передает результаты на компьютер. Modbus часто используется для подключения контрольного компьютера с удаленным терминальным блоком (RTU) в системах диспетчерского управления и сбора данных (SCADA). Версии протокола Modbus существуют для последовательных линий (RTU и ASCII) и для Ethernet (TCP).
Как это работает?
Modbus передается по последовательным линиям между устройствами. Самой простой установкой был бы один последовательный кабель, соединяющий последовательные порты на двух устройствах: Master и Slave.
Данные отправляются как серия единиц и нулей, называемых битами. Каждый бит передается как напряжение, нули — положительные, а единицы — отрицательные напряжения. Биты отправляются очень быстро. Типичная скорость передачи составляет 9600 бод (бит в секунду).
Протокол Master/Slave
При описании протокола Modbus RTU связь осуществляется между централизованным ведущим оборудованием, 247 подключенными электронными устройствами в одной сети. Конструкцию обычно называют протоколом «ведущий/ведомый», поскольку система Master запрашивает информацию у подключенных устройств, которые называются «подчиненными». Ведомые устройства отправляют информацию только мастеру в ответ на эти запросы, они не работают автономно. Ведущий может также записывать информацию на подчиненные устройства, но подчиненные устройства не могут записывать информацию ведущему устройству.
Когда ведомое устройство передает сообщение Modbus, оно начинает формировать сообщение с уникальным идентификатором адреса. Это число от 1 до 247, что позволяет мастеру определять, какое конкретное устройство отвечает запрошенной информации.
Связь и устройства
Каждому устройству, предназначенному для связи с использованием Modbus, присваивается уникальный адрес. В последовательных сетях только узел, назначенный мастером, может инициировать команду. В Ethernet любое устройство может отправлять команду Modbus, хотя обычно это делает только одно ведущее. Команда содержит адрес устройства, для которого он предназначен (от 1 до 247).
Все команды включают информацию контрольной суммы, чтобы позволить получателю обнаруживать ошибки передачи. Базовые команды Modbus указывают RTU на изменение значения в одном из своих регистров, управление или чтение порта ввода-вывода, команду устройству отправить обратно одно или несколько значений, содержащихся в его регистрах.
Существует много модемов и шлюзов, поддерживающих Modbus, поскольку это очень простой протокол и часто копируется. Некоторые из них были специально разработаны для него. Различные реализации используют проводную, беспроводную связь, например, в диапазоне ISM, и даже службу коротких сообщений (SMS), а также услугу общей пакетной радиосвязи (GPRS). Типичные проблемы, с которыми приходится сталкиваться дизайнерам, включают проблемы с высокой задержкой и временем.
Обзор типов регистра Modbus
Типы регистров, на которые ссылаются устройства, включают:
• катушку (дискретный выход); • дискретный вход; • входной регистр; • регистрацию холдинга.
Коды функций
Существует три категории кодов функций Modbus:
- Коды общих функций — от 1 до 127, за исключением пользовательских кодов, проверенных сообществом Modbus, публично задокументированы и гарантированно уникальны.
- Пользовательские коды функций — находятся в двух диапазонах от 65 до 72, от 100 до 110.
- Коды зарезервированных функций — используются некоторыми компаниями для устаревших продуктов, недоступны для общего пользования.
Преимущества
Некоторые преимущества использования протокола Modbus:
- Если драйвер уже установлен, а пользователь знаком с Ethernet и сокетами TCP/IP, драйвер может работать и обмениваться данными с ПК через несколько часов. Расходы на разработку считаются низкими. Требуется минимальное число оборудования. Драйвер совместим с любой операционной системой.
- Нет необходимости в «экзотических» наборах микросхем, поэтому система может использовать стандартные ПК-карты Ethernet для общения с недавно реализованным устройством. Поскольку стоимость Ethernet падает, сокращаются затраты на аппаратное обеспечение. Пользователи не привязаны к одному поставщику услуг для поддержки, но могут воспользоваться нынешними разработками.
- Спецификация доступна бесплатно для скачивания, никаких дополнительных лицензионных сборов, необходимых для использования протоколов Modbus, не требуется.
- Взаимодействие между устройствами разных производителей и совместимость с установленной базой совместимых устройств.
Стоят преобразователи протоколов Modbus дорого. Цена промышленных шлюзов составляет 1000 долларов.
Ограничения
Поскольку Modbus был разработан в конце 1970-х годов для связи с программируемыми логическими контроллерами, численность типов данных ограничена теми, которые были поняты ПЛК в то время. Большие двоичные объекты не поддерживаются.
Нет стандартного способа для узла, чтобы найти описание объекта данных, например, чтобы определить, представляет ли значение регистра — значение температуры между 30 и 175 градусами.
Поскольку Modbus является протоколом типа «ведущий/ведомый», для устройства нет возможности «сообщать об исключении» (кроме Ethernet TCP/IP, называемого open-mbus). Главный узел должен регулярно получать данные с дочерних устройств, а также искать изменения в данных. Это нагружает полосу пропускания, увеличивает время подключения к сети в приложениях, где пропускная способность может быть дорогой, например, в каналах с низкой скоростью передачи данных.
Modbus ограничивается адресацией 254 устройств на одной линии передачи данных, что ограничивает число устройств, которые могут быть подключены к мастер-станции (Ethernet TCP/IP является исключением). Передачи должны быть непрерывными, что ограничивает типы удаленных коммуникационных устройств теми, которые могут буферизовать данные, чтобы избежать пробелов в передаче. Сам протокол Modbus не обеспечивает защиту от несанкционированных команд или перехвата данных. Важно понимать, что в процессе передачи информации возникают логические ошибки, а также связанные с искажениями при обмене.
Источник: fb.ru
Что такое Modbus и RS-485 — максимально просто
Изучая оборудование систем Умный Дом и вообще почти любой автоматики и диспетчеризации мы постоянно сталкиваемся с упоминанием протокола Modbus и порта RS-485.
Например, у контроллера EasyHomePLC есть два порта RS-485 и два порта RS-232, у контроллера Wiren Board есть два порта RS-485, у контроллера Beckhoff CX-8080 есть порт RS-485 и порт RS-232. У различного оборудования есть возможность управления по протоколу Modbus: кондиционеры, вентустановки, модули ввода-вывода. А ещё программное обеспечение EasyHome связывается с контроллером по протоколу Modbus TCP. Что всё это означает?
Значит ли это, что если у контроллера есть интерфейс Modbus, и у устройства есть такой интерфейс, они сразу заработают вместе? Многие так считают, но это неверно. Объясню максимально просто и понятно.
Что такое RS-485
RS-485 — это стандарт физического уровня. Что это означает? Он определяет следующие параметры общения устройств:
- связь кабелем «витая пара» по двум жилам
- максимальная длина кабеля 1200 метров
- дискретные сигналы (либо 1, либо 0)
- если напряжение жилы А больше напряжения жилы В более, чем на 200 милливольт, то сигнал считается единицей. Если наоборот, то нулем
- скорость общения может быть до 1 мегабита в секунду по одной витой паре и до 10 мегабит по двум витым парам
- максимальный ток в шине 250 миллиампер
- напряжение от -7 до +12 вольт постоянного тока
- в один момент времени может передавать информацию только одно устройство в сети
То есть, стандарт подразумевает, что на 2-проводную шину (одну витую пару) можно подключить множество устройств. Он не описывает никакой язык общения оборудования.
Что такое RS-232
Другой стандарт, тоже по кабелю «витая пара». Не буду перечислять все параметры стандарта, он используется достаточно мало сейчас. В частности, все помнят мышки, которые подключались к компьютеру через широкий COM-порт, вот это как раз была связь по RS-232. К контроллерам EasyHomePLC и Beckhoff подключается GSM модем для приёма и отправки смс как раз через порт RS-232. Длина кабеля совсем небольшая.
Существуют переходники с RS-232 на RS-485 и обратно. Мы получаем возможность подключить на порт RS-232 что-то, что подключается по RS-485 или сделать длинную линию связи для устройств RS-232, поставив в начале линии переходник на 485, а в конце обратно.
Что такое Modbus
Переходим к более интересной вещи. Modbus — это уже протокол. Он определяет правила общения устройств. Например, он говорит, что одно устройство должно быть ведущим (master), а остальные ведомыми (slave). Ведущее посылает в шину связи сообщение определённого формата, в котором либо указан адрес нужного slave устройства, либо сообщение предназначено для всех устройств.
Устройство slave, на которое отправлено сообщение, может ответить мастеру. Протокол регламентирует формат сообщения, его длину, возможные значения элементов сообщения. Есть также контрольная сумма, которая нужна для проверки того, что сообщение дошло неискажённым.
Но протокол Modbus не регламентирует, какими могут быть сами команды и какая среда передачи данных используется. Есть Modbus serial — это работа по RS-485 или RS-232, то есть, по одной перевитой паре кабелей. Есть Modbus TCP — это работа в компьютерной сети TCP/IP, где у каждого устройства есть IP адрес и порт.
Можно привести аналогию с человеческим общением. Среда передачи данных — это обычно звук. Стандарт подразумевает, что есть минимальная громкость и максимальная громкость, и громкость речи находится в этом диапазоне. Можно говорить по очереди, а можно одновременно. Есть некий диапазон скоростей передачи звуков, который может использоваться.
Есть также диапазон частот звуков. Есть максимальное расстояние, на которое можно передавать звук. А можно общаться не звуком, а световыми вспышками, текстом, хлопками в ладоши или жестами. На каждый способ общения есть некий набор правил. Вот что определяет стандарт.
Протокол общения — это ещё не язык, нет. Протокол даёт нам такие понятия как то, что сообщение состоит из слов, разделяемых тишиной. Слова состоят из слогов. А ещё то, что в начале общения надо здороваться, а в конце прощаться. Говорить может только один в один момент времени.
Как-то так.
И вот мы подошли к главному вопросу. У нас контроллер имеет порт (он же разъём, он же шлюз) RS-485 и в него программно заложена возможность общения по Modbus. Также у нас есть кондиционер, у которого также есть физический разъём RS-485 и в паспорте указана возможность работы по Modbus. Что это для нас значит? Это значит, что устройства теоретически могут работать совместно.
Как люди, имеющие возможность говорить, теоретически могут общаться. Для нас такая возможность подразумевает полноценное управление и контроль обратной связи. Но заставить их работать вместе не так просто. Нужно в контроллере написать драйвер для работы именно с этим устройством. Для этого в инструкции к устройству надо найти карту регистров, то есть, описание возможных команд устройства. Вот пример некоторых регистров для вентмашины:
[Request0]
Direction=read
Type=bit
Baudrate=115200
Address=1
Period=100
var0=3800#bool#SCo_Зима/~Лето
var1=3801#bool#SCo_Дист/~Мест
var2=3802#bool#SCo_Таймер
var3=3803#bool#SCo_Блокировка
var4=3804#bool#SCo_Пуск/~Стоп
var5=3805#bool#SCo_Локальный~Пуск/Стоп var6=3806#bool#SCoРежимR2 var7=3807#bool#SCoРежимR3 var8=3808#bool#SCoРежимR4 var9=3809#bool#SCoРежимR5 var10=380a#bool#SCoРежим_R6
Чем сложнее устройство, тем вариантов команд больше. В вентмашине или кондиционере их может быть до сотни. Также по протоколу RS-485 мы можем общаться с инфракрасными приёмопередатчиками, генераторами, конвекторами, электрокарнизами, кондиционерами, термостатами, датчиками и различными элементами расширения контроллера на DIN рейку: модулями входов и выходов, диммерами.
Написать драйвер связи теоретически несложно, но это большая работа. Нужно предусмотреть нюансы работы техники, придумать удобный интерфейс управления и получения обратной связи, прописать в драйвере возможные коды ошибок. После подключения реального устройства может потребоваться доналадка, если не всё было учтено в инструкции или в драйвере. Стоимость этой работы может быть достаточно высокой, поэтому стоит обращать внимание на то, какие драйверы уже присутствуют в программном обеспечении, прилагаемом к контроллеру.
Например, в программном обеспечении EasyHome есть поддержка ИК-передатчиков ICPDas и Insyte, модулей связи с кондиционерами Mitsubishi и Daikin, конвекторов Varmann, счётчиков электричества Delta, блоков расширения Овен, Razumdom, Bolid, вентмашин Komfovent и ещё много чего. Нужно смотреть конкретные поддерживаемые модели, у разных моделей разные спецификации команд.
Есть устройства с поддержкой Modbus TCP, там нужно, чтобы оно было включено в локальную сеть, отдельный порт RS-485 контроллера не нужен.
К системам на Z-Wave напрямую ничего по Modbus не подключить, там нет такой возможности. Только используя промежуточный контроллер, который поддерживает и Modbus, и Z-Wave, например, Wiren Board.
Есть важная особенность работы устройств по Modbus. У Modbus есть устройство-мастер (это контроллер) и устройство-слейв (то, что к нему подключается). Слейв не может сам инициировать передачу данных, поэтому мастер постоянно опрашивает все подключенные к нему слейвы на предмет их состояния. Если у нас датчик подключен к дискретному входу устройства Овен МВ, то при изменении состояния датчика меняется состояние входа, но модуль не может сразу же сообщить об этом контроллеру, так как не может сам инициировать связь. Нужно дождаться, пока контроллер опросит этот модуль, тогда модуль отправит ему в ответ своё состояние и контроллер поймёт, что датчик изменил состояние и что-то сделает.
Что произойдёт, если на вход Овен МВ пришёл сигнал о сработке датчика, а потом датчик изменил состояние на первоначальное, а контроллер не успел его опросить? В программе модуля МВ есть счётчики количества сработок каждого входа, вот их-то контроллер и считывает, и видит, что было изменение.
Скорость опроса модулей контроллером ограничена, поэтому контроллер не мгновенно узнаёт о событии, это зависит от того, какая скорость опроса, насколько она оптимизирована, и сколько модулей расширения подключено к контроллеру. Если у нас очень много модулей, которых контроллер по очереди опрашивает, то весь цикл опроса занимает некоторое время, пока очередь нужного нам модуля не подойдёт, об изменении состояния мы не узнаем.
А потом контроллер должен будет отправить нужную команду соответствующему модулю реле для изменения его состояния. У EasyHomePLC при количестве модулей расширения не более 5 максимальная задержка отрабатывания события не превышает 1.5 секунды, что достаточно быстро. Зависит от того, что опрашивалось в момент изменения состояния входа. У контроллеров Beckhoff связь между модулями расширения происходит по собственному протоколу связи, там независимо от количества модулей всё отрабатывает мгновенно.
Версии Modbus — TCP и RTU
Ещё раз обозначим разницу между версиями связи по ModBus.
Modbus RTU, он же Modbus Serial — работа по RS-485 или RS-232. Подключение устройств по витой паре, где контроллер мастер, а остальные устройства — слейвы, которые не могут сами инициировать связь. Самый распространённый вариант связи.
Modbus TCP или Modbus TCP/IP — общение устройств происходит по обычной компьютерной сети TCP/IP, включающей работу через интернет и через Wi-Fi. То есть, возможна связь между устройствами на любом расстоянии, когда оба подключены к интернету.
Есть ещё несколько разновидностей: Modbus RTU/IP (отличается от TCP наличием контрольной суммы), Modbus over UDP, Modbus Plus (собственный протокол фирмы Schneider Electric, в сети могут быть несколько мастеров).
Ещё небольшая статья про работу устройств по протоколу Modbus в системах Умный Дом: RS-485 Modbus в системах Умного Дома.
330,051 просмотров всего, 62 просмотров сегодня
Источник: home-matic.ru
Описание протокола Modbus
2020-12-31 Промышленное 4 комментария
Несмотря на свой солидный возраст, а разработан он был еще в 70-х годах компанией Modicon, Modbus до сих пор является одним из самых, а скорее даже самым распространенным промышленным протоколом связи, во многом благодаря простой программной реализации и широкой поддержке большинством устройств, применяемых при создании систем автоматизации технологических процессов. Кроме того, протокол обладает высокой достоверностью передачи данных, связанную с применением надежного метода контроля ошибок.
Конечно, есть у протокола Modbus и свои недостатки, в частности сетевой обмен данными ведется по типу «ведущий-ведомый» (master-slave), то есть в сети может быть только одно ведущее устройство (master), которое опрашивает одно или несколько ведомых (slave). После отправки запроса ведущее устройство ожидает ответ от ведомого в течении определенного времени задержки — тайм-аута. Если в течение этого времени ответ не получен, master считает, что связь с ведомым отсутствует.
Соответственно ведомое устройство не может начать передавать данные по мере их поступления, а должно дождаться опроса со стороны ведущего, что приводит к тому, что master должен постоянно опрашивать slave устройства. Из этого вытекает и еще один недостаток протокола — slave устройство не может обнаружить потерю связи с master.
Реализация протоколов Modbus
Согласно модели OSI (Open Systems Interconnection), представляющую собой модель взаимодействия открытых систем, определяющей каким образом различные сетевые устройства взаимодействуют между собой, протокол Modbus содержит три уровня: физический, канальный и прикладной.
Физический уровень
На физическом уровне на базе последовательных интерфейсов связи RS-232, RS-485 реализованы протоколы Modbus RTU и Modbus ASCII. Передача данных по протоколу Modbus TCP осуществляется на основе сетей Ethernet через TCP/IP соединение. Далее рассмотрим структуру протокола Modbus RTU, как наиболее часто используемого.
Остановимся немного подробнее на этих терминах — интерфейс, протокол.
Интерфейсы передачи данных обеспечивают физическое подключение устройств в сети, то есть в данном случае они обеспечивают необходимые электрические параметры линии связи и другие параметры, связанные с передачей сигнала от одного устройства к другому, но при этом ничего не сообщают о том, как устройства должны обмениваться данными. За это отвечает протокол передачи данных, который определяет правила пересылки пакетов данных в сети.
На практике наиболее часто встречаются сети на основе интерфейса RS-485, для которых характерны следующие особенности построения:
- Шинная топология сети — сетевая архитектура, предусматривающая последовательное подключение устройств к линии.
Согласно спецификации, на линию с максимальным расстоянием 1200 м можно подключить до 32 устройств. Если протяженность линии превышает это значение, либо необходимо подключение большего количества устройств, то применяются повторители интерфейса (репитеры). Благодаря этому количество опрашиваемых устройств в сети может увеличиться до 247 и протяженность линии увеличиться еще на 1200 м.
- Двухпроводная линия передачи данных. Интерфейс RS-485 подразумевает дифференциальный способ передачи данных, то есть по одному проводу передается оригинальный сигнал, а по второму- инвертированный, то есть если на одном проводе единица, то на другом ноль и наоборот. Таким образом между ними всегда присутствует разность потенциалов. При разности напряжений более 200мВ, до +12В считается, что на линии установлено значение логической единицы, при значении напряжения менее -200мВ до -7В — логического нуля.
- Для соединения шины стандарт предписывает применение экранированной витой пары с волновым сопротивлением 120 Ом, где два провода используются для передачи данных, а третий в качестве общего GND, для выравнивания потенциалов устройств. Общий провод и экран должны заземляться в одной точке. Особенно эти требования актуальны для линий с большой протяженностью.
- Установка согласующих (терминальных) резисторов, примерно такого же номинала, как волновое сопротивление кабеля, на концах линии. В некоторых случаях терминальные резисторы уже встроены в само устройство и их включение в линию и выключение осуществляется джамперами.
Канальный уровень
Канальный уровень отвечает за создание, прием и передачу пакетов данных в сети. Запросы по Modbus RTU поступают от устройства-мастера к подчиненным устройствам в виде пакетов данных (фреймов, кадров), состоящих из адреса подчиненного устройства, кода функции, данных и контрольной суммы.
Адрес устройства — это имя идентификатор, благодаря которому ведущее устройство может определить, от какого модуля пришел ответ на запрос, а подчиненные устройства отвечают только на те запросы, которые поступили в их адрес. Благодаря этому в сети не возникает конфликтов при передаче данных.
Каждое устройство должно иметь свой уникальный адрес с 1 по 247, с 248 по 255 адреса зарезервированы. В сети не должно быть устройств с одинаковыми адресами. Адрес 0 является широковещательным и предназначен для передачи информации всем устройствам в сети. Запрос с нулевым адресом устройства не предполагает ответа.
Код функции передает команду, которую должно выполнить устройство. Стандартом предусмотрено три категории кодов функций: стандартные, задаваемые пользователем и зарезервированные.
Данные содержат необходимую информацию для выполнения заданной функции или значения данных, передаваемые ведомым устройством в ответ на запрос ведущего.
Контрольная сумма служит для проверки отсутствия ошибок в передаваемых данных. В Мodbus RTU используется 2 байта контрольной суммы. Проверка осуществляется на основе алгоритма CRC16 (циклический избыточный код), который проверяет целостность данных пакетов.
Передача сообщений в Мodbus RTU представлена в следующем формате:
Посылка сообщения всегда начинается со стартового бита — бита с нулевым уровнем. Затем идут 8 бит данных младшим битом вперед, бит четности, служащий для проверки общей чётности двоичного числа и заканчивается сообщение битом с единичным уровнем — стоповым битом. Бит четности (parity bit) обеспечивает контроль целостности передаваемых данных.
При контроле по чётности (even parity) к данным добавляется бит чётности, значение которого делает полученную сумму чётной, при контроле по нечётности (odd parity) полученная сумма должна стать нечётной. Бит четности не является обязательным и может вообще отсутствовать в сообщении. В этом случае вместо бита четности используется второй стоповый бит.
Прикладной уровень
Прикладной уровень обеспечивает обмен данными между устройствами ведущий-ведомый. Он основан на обращении с помощью кодов функций к регистрам данных для чтения/записи значений.
Протокол Modbus определяет четыре типа данных:
Тип данных | Размер | Доступ | Номер регистра | Диапазон адресов |
Discrete Inputs Дискретные входы | 1 бит | только чтение | 10001. 19999 | 0 — 65535 |
Coils Регистры флагов | 1 бит | чтение и запись | 00001. 09999 | 0 — 65535 |
Input Registers Регистры ввода | 16-битное слово | только чтение | 30001. 39999 | 0 — 65535 |
Holding Registers Регистры хранения | 16-битное слово | чтение и запись | 40001. 49999 | 0 — 65535 |
Дискретные входы (Discrete Inputs) – представляют однобитовые регистры (0 или 1), хранящие состояние дискретных входов устройства. Эти регистры поддерживают только чтение.
Регистры флагов (Coils) также представляют собой однобитовые регистры, но хранящие состояние дискретных выходов устройств. Допускают как чтение, так и запись.
Регистры ввода (Input Registers) представлены 16-битовым знаковым или беззнаковым типом. Используются для работы с входными данными, например аналоговыми значениями входов. Поддерживают только чтение.
Регистры хранения (Holding Registers) представлены 16-битовым знаковым или беззнаковым типом. Поддерживают как чтение, так и запись данных.
Адреса регистров
Доступ к регистрам данных из таблицы осуществляется при помощи 16-ти битного адреса. Первому элементу соответствует адрес 0. Таким образом, каждая из этих 4-х таблиц может включать в себя до 65536 регистров (адреса 0…65535 – 16 бит).
Нумерация регистров представлена в виде десятичных значений. Для обращения к адресу требуемого регистра необходимо указать так называемое смещение (offset) — убрать первую цифру из номера регистра и вычесть единицу. Например в Holding Registers нумерация начинается с 40001. Отбросим значение 4 и вычтем из единицы единицу. Таким образом адрес регистра будет равен 0.
Коды функций
Для доступа к данным области памяти используются коды функций. Несмотря на то, что стандартных кодов существует довольно много, в основном используются следующие коды функций:
Код функции | HEX | Название | Действие |
1 | 0×01 | Read Coils | Чтение значений нескольких регистров флагов |
2 | 0×02 | Read Discrete Inputs | Чтение значений нескольких дискретных входов |
3 | 0×03 | Read Holding Registers | Чтение значений нескольких регистров хранения |
4 | 0×04 | Read Input Registers | Чтение значений нескольких регистров ввода |
5 | 0×05 | Write Single Coil | Запись одного регистра флагов |
6 | 0×06 | Write Single Register | Запись одного регистра хранения |
15 | 0x0F | Write Multiple Coils | Запись нескольких регистров флагов |
16 | 0×10 | Write Multiple Register | Запись нескольких регистров хранения |
Из таблицы понятно, что например для Discrete Inputs используется только функция 02, для Coils уже можно использовать либо 01 функцию для чтения, либо 05 для записи одного регистра, либо 15 для записи группы регистров и т.д.
Пример запроса
Предположим, нам надо обратиться к устройству с адресом 17 и получить значение аналогового выхода с помощью Holding Register из регистров 40108 до 40110, то есть значение 3-х регистров. В этом случае, запрос от ведущего устройства к ведомому будет представлен в следующем виде:
11 03 006B 0003 7687
- 11 — Адрес ведомого устройства в формате HEX (17=11 hex)
- 03 — Функция Read Holding Registers, считываем значение нескольких регистров хранения
- 006B — Адрес первого регистра (40108-40001 = 107 = 6B hex, смещение регистра)
- 0003 — Количество считываемых регистров ( 3 регистра с 40108 до 40110)
- 7687 — Контрольная сумма CRC
Ведомое устройство должно переслать следующий ответ:
11 03 06 AE41 5652 4340 49AD
- 11 — Адрес устройства
- 03 — Функция Read Holding Registers
- 06 — Количество байт (6 байтов идут следом)
- AE — Значение старшего разряда регистра в hex (Register value Hi-AO0)
- 41 — Значение младшего разряда регистра в hex (Register value Lo-AO0)
- 56 — Значение старшего разряда регистра в hex (Register value Hi-AO1)
- 52 — Значение младшего разряда регистра в hex (Register value Lo-AO1)
- 43 — Значение старшего разряда регистра в hex (Register value Hi-AO2)
- 40 — Значение младшего разряда регистра в hex (Register value Lo-AO2)
- 49 — Контрольная сумма (CRC value Lo)
- AD — Контрольная сумма (CRC value Hi)
Коды ошибок
Вместо корректного ответа, содержащего запрошенные данные, ведомое устройство может переслать ответ с ошибкой. При этом к коду функции в ответе добавляется код 0×80 в формате hex, то есть в данном случае к коду функции 03 добавляется 80 и признак ошибки будет иметь значение 83.
Кроме того отсылается код ошибки:
- 01 — функция не поддерживается. Это значит, что, возможно, функция не стандартная или просто не реализована конкретно в этом устройстве.
- 02 — запрошенная область памяти не доступна. Каждое устройство содержит определённое количество данных определённого типа. Например, в устройстве доступно 100 регистров общего назначения. Если при этом запросить чтение 101 регистров, то возникнет ошибка 02.
- 03 — функция не поддерживает запрошенное количество данных. Например, функция Read Holding Registers позволяет считывать от 1 до 2000 регистров общего назначения. Поэтому, даже если в подчинённом устройстве доступно для чтения 10 000 регистров, при запросе более 2000 с помощью данной функции возникает эта ошибка.
- 04 — функция выполнена с ошибкой. Этот код отсылается в случае, если ошибка не относится к трем предыдущим кодам.
Резюме
Данная статья является, можно сказать, только вводной частью в тему промышленных протоколов и безусловно не охватывает все вопросы, связанные с ними, в частности с Modbus. Так например мы не рассмотрели Modbus TCP и его отличия от RTU, также не была рассмотрена практическая реализация обмена данными по Modbus между устройствами. Так что статьи по данной теме обязательно еще будут на сайте.
Источник: electric-blogger.ru
Настройка обмена по протоколу Modbus в CODESYS v3.5
Среда программирования CODESYS v3.5 Компания 3S-Smart Software Solutions GmbH выпустила новую версию среды программирования CODESYS v3, построенную по концептуально новому принципу: разработчики взяли за основу объектно-ориентированное программирование (ООП). В третьей версии появилась возможность создания программ процедурным методом либо на принципах стандартного ООП. Языки программирования дополнены новыми типами. Третья версия создана в новом дизайне. Используется новый метод построения конфигурации контроллера, введена версионность библиотек, Target-файлов и других компонентов. Эти возможности обеспечиваются репозиторием устройств и библиотек. Обновлена визуализация: добавлено множество компонентов, таких как таблицы, списки, тексты с поддержкой форматирования. Появилась возможность использования различных стилей визуализации с применением собственных методов заливки с градиентами. Введена поддержка векторной графики в формате SVG. Создание нового проекта в среде CODESYS v3.5 В первую очередь обращаем внимание на особенности создания нового проекта. Для этих целей в среде CODESYS v2.3 использовалась вкладка Конфигурация ПЛК, в CODESYS v3.5 настройка осуществляется на вкладке Устройства (в английской версии соответственно Devices). Контроллер, интерфейс, протокол, модуль с точки зрения CODESYS v3.5 являются программными устройствами (Devices). Любое устройство, созданное в CODESYS v3.5, имеет конкретную версию. При добавлении в проект устройств CODESYS по умолчанию использует самую старшую версию. ВЕРСИИ УСТРОЙСТВ, ИСПОЛЬЗУЮЩИЕСЯ В ПРОЕКТЕ, ДОЛЖНЫ СТРОГО СООТВЕТСТВОВАТЬ ВЕРСИИ TARGETФАЙЛА КОНТРОЛЛЕРА ИЛИ БЫТЬ МЛАДШЕ.Если это условие не выполнено хотя бы для одного устройства, то возникают множественные ошибки компиляции. Далее будет подробно рассмотрено, каким образом выбираются версии устройства и Target-файла. Среда программирования CODESYS v3.5 и Target-файлы находятся на сайте: http://www.owen.ru/catalog/25605006 в свободном доступе. Режимы работы в CODESYS v3.5 по протоколу Modbus Если сравнивать режимы, которые реализованы в CODESYS v2.3 и v3.5, то в новой версии имеется ряд ограничений, которые ввела компания 3S Software. CODESYS v3.5 поддерживает режимы Modbus Master RTU/TCP и Slave RTU/ TCP, но не поддерживает Modbus ASCII. Режим ASCII реализован в библиотеке Modbus ОВЕН. Поддерживаемые скорости обмена в CODESYS v3.5:
- 4800
- 9600
- 19200
- 38400
- 57600
- 115200
Не поддерживаемые скорости обмена[1] в CODESYS v3.5:
Нумерация портов в CODESYS v3.5
При настройке интерфейсов RS-232/485 необходимо указывать номера портов. Номер порта в CODESYS v3.5 не соответствует номеру, указанному на корпусе прибора. Соотношение номеров портов на корпусе и в CODESYS v3.5 находятся в руководстве по эксплуатации, входящем в комплект поставки оборудования. В табл. 1 приведены номера портов для панельных контроллеров серии СПК.
Номер порта на корпусе прибора
Нумерация портов в среде программирования CODESYS
Источник: aip.com.ru