Modbus

Modbus - це комунікаційний протокол, заснований на архітектурі «клієнт-сервер». Широко застосовується в промисловості для організації зв'язку між електронними пристроями. Може використовувати для передачі даних через послідовні лінії зв'язку RS-485, RS-422, RS-232, а також мережі TCP/IP (Modbus TCP ).

Не слід плутати MODBUS і Modbus Plus. Modbus Plus - пропріетарний протокол належить компанії Schneider Electric. Фізичний рівень унікальний, схожий на Ethernet 10BASE-T, напівдуплекс по одній витій парі, швидкість 1 Мбіт / с. Транспортний протокол - HDLC, поверх якого специфіковано розширення для передачі PDU MODBUS.


Історія

Modbus був розроблений компанією Modicon (в даний час належить Schneider Electric) для використання в її контролерах з програмованою логікою. Вперше специфікація протоколу була опублікована в 1979 році. Це був відкритий стандарт, що описує формат повідомлень і способи їх передачі в мережі яка складається з різних електронних пристроїв.

Спочатку контролери MODICON використовували послідовний інтерфейс RS-232. Пізніше став застосовуватися інтерфейс RS-485, так як він забезпечує більш високу надійність, дозволяє використовувати довші лінії зв'язку і підключати до однієї лінії кілька пристроїв.

Багато виробників електронного устаткування підтримали стандарт, на ринку з'явилися сотні використовуючих його виробів. В наш час розвитком Modbus займається некомерційна організація Modbus-IDA, створена виробниками та користувачами електронних приладів.


Стандарт MODBUS

Специфічна термінологія

  • PDU (Protocol Data Unit) - загальна для всіх фізичних рівнів частина пакета MODBUS. Включає в себе код функції і дані пакета.
  • ADU (Application Data Unit) - повний пакет MODBUS. Включає в себе специфічну для фізичного рівня частину пакету і PDU.

MODBUS специфікує 4 типи даних:

  • Дискретних входів - однобітовий тип, доступний тільки на читання.
  • Котушки - однобітовий тип, доступний на читання і на запис.
  • Вхідні регістри - 16-бітовий знаковий або беззнакові тип, доступний тільки на читання.
  • Проведення регістри - 16-бітовий знаковий або беззнакові тип, доступний на читання і на запис.


Склад стандарту

Стандарти MODBUS складаються з 3 частин:

  • Документ Modbus Application Protocol містить специфікацію прикладного рівня мережевої моделі OSI:
    • Елементарний пакет протоколу, так званий PDU (Protocol Data Unit), він єдиний для всіх фізичних рівнів. PDU упаковується в індивідуальний для кожного транспорту застосування блоку даних (ADU).
    • Коди функцій і складу PDU для кожного коду.
  • Документ Modbus по послідовної лінії містить специфікацію канального та фізичного рівнів мережної моделі OSI для фізичних рівнів RS485 і RS232. В принципі може використовуватися будь-який фізичний рівень заснований на асинхронному приймач.
  • Документ MODBUS повідомлень по протоколу TCP / IP Керівництво по впровадженню містить специфікацію ADU для транспорту через TCP / IP стек.


Переваги стандарту

Основні переваги стандарту - відкритість і масовість. Величезна кількість датчиків і виконавчих пристроїв випущено промисловістю. Практично всі промислові системи контролю та управління мають програмні драйвера для роботи з мережами MODBUS.


Недоліки стандарту

  • Стандарт у своїй основі був написаний дуже давно, і багато актуальних для сучасних промислових мереж питання не були враховані.
  • Стандарт специфікує метод передачі тільки двох типів даних. Відсутність чіткої вказівки в стандарті призвело до того, що з іншими типами даних сторонні виробники MODBUS-рішень надходили на свій розсуд. Розбрід де-факто в цьому питанні не дозволив згодом зробити уточнення в офіційному документі: це викликало б сплеск невдоволення виробників і можливу війну форматів.
  • Стандарт не дозволяє ніякої оперативної сигналізації від кінцевого пристрою до майстра в разі необхідності (переривання). Потрібно чекати своєї черги в опитуванні. Це істотно обмежує застосовність MODBUS-рішень в системах управління реального часу.
  • Стандарт не дозволяє кінцевим пристроям обмінюватися фіксованими даними один з одним без участі майстра. Це істотно обмежує застосовність MODBUS-рішень в системах регулювання реального часу.
  • Стандарт не пропонує жодних рішень по початковій ініціалізації системи. Призначення мережевих адрес і прописування в системі параметрів кожного конкретного пристрою виконуються вручну.


Вступ

Modbus відноситься до протоколів прикладного рівня мережевої моделі OSI.

Контролери на шині Modbus взаємодіють, використовуючи клієнт-серверну модель, засновану на транзакціях, що складаються із запиту і відповіді.

Зазвичай в мережі є тільки один клієнт, так зване, «головне» (англ. master) пристрій, і кілька серверів - «підлеглих» (англ. slaves) пристроїв. Головне пристрій ініціює транзакції (передає запити). Підлеглі пристрої передають запитувані головним пристроєм дані, або виробляють запитувані дії. Головний може адресуватися індивідуально до підлеглого або ініціювати передачу широкомовного повідомлення для всіх підлеглих пристроїв. Підлеглий пристрій формує повідомлення і повертає його у відповідь на запит, адресований саме йому. При отриманні широкомовного запиту відповідь не формується.

Специфікація Modbus описує структуру запитів і відповідей. Їх основа - елементарний пакет протоколу, так званий PDU (Protocol Data Unit). Структура PDU не залежить від типу лінії зв'язку і включає в себе код функції і поле даних. Код функції кодується однобайтові полем і може приймати значення в діапазоні 1 ... 127. Діапазон значень 128 ... 255 зарезервований для кодів помилок. Поле даних може бути змінної довжини. Розмір пакета PDU обмежений 253 байтами.


Modbus PDU
номер функції: 1 байт
дані: N <253 (байт)

Для передачі пакету по фізичних лініях зв'язку PDU поміщається в інший пакет, що містить додаткові поля. Цей пакет має назву ADU (Application Data Unit). Формат ADU залежить від типу лінії зв'язку.

Існують три основні реалізації протоколу Modbus, дві для передачі даних по послідовних лініях зв'язку, як мідним EIA/TIA-232-E (RS-232), EIA-422, EIA/TIA-485-A (RS -485), так і оптичним і радіо:

  • Modbus ASCII - для обміну використовуються тільки ASCII символи. Для перевірки цілісності використовується алгоритм Longitudinal redundancy check. Повідомлення поділяється на стовпці за допомогою символу «:» і закінчується символами нового рядка CR / LF.
  • Modbus RTU

і для передачі даних по мережах Ethernet поверх TCP/IP:

  • Modbus TCP.

Загальна структура ADU наступна (у залежності від реалізації, деякі з полів можуть бути відсутні):

блок виявлення помилок

де

  • Адресу відомого пристрою - адреса підлеглого пристрою, до якого адресовано прохання.

Відомі пристрої відповідають тільки на запити, що надійшли на їх адресу. Відповідь також починається з адреси відповідає відомого пристрою, який може змінюватися від 1 до 247. Адреса 0 використовується для широкомовної передачі, його розпізнає кожне пристрій, адреси в діапазоні 248 ... 255 - зарезервовані;.

  • Номер функції - це наступне однобайтное поле кадру. Воно говорить відомому пристрою, які дані або виконання якого дії вимагає від нього ведучий пристрій;
  • Дані - поле містить інформацію, необхідну відомому пристрою для виконання заданої майстром функції або містить дані, що передаються веденим пристроєм у відповідь на запит ведучого. Довжина і формат поля залежить від номера функції;
  • Блок виявлення помилок - контрольна сума для перевірки відсутності помилок в кадрі.

Максимальний розмір ADU для послідовних мереж RS232/RS485 - 256 байт, для мереж TCP - 260 байт.

Для Modbus TCP ADU виглядає наступним чином:

ід транзакції ід протоколу довжина пакету адресу відомого пристрою код функції дані

де

  • Ід транзакції - два байти, зазвичай нулі
  • Ід протоколу - два байти, нулі
  • Довжина пакету - два байти, старший потім молодший, довжина наступної за цим полем частини пакета
  • Адресу відомого пристрою - адреса підлеглого пристрою, до якого адресовано прохання. Зазвичай ігнорується, якщо з'єднання встановлено з певним пристроєм. Може використовуватися, якщо з'єднання встановлено з Бриджіт, який виводить нас, наприклад, в мережу RS485.

Поле контрольної суми в Modbus TCP відсутня.

Категорії кодів функцій

У діючій в наш час специфікації протоколу визначаються три категорії кодів функцій:

Стандартні команди
Їх опис має бути опублікована та затверджено Modbus-IDA. Ця категорія включає в себе як вже певні, так і вільні в наш час коди.
Користувальницькі команди
Два діапазони кодів (від 65 до 72 і від 100 до 110), для яких користувач може реалізувати довільну функцію. При цьому не гарантується, що якийсь інший пристрій не буде використовувати той же самий код для виконання іншої функції.
Зарезервовані
У цю категорію входять коди функцій, які не є стандартними, але вже використовуються в пристроях, що виробляються різними компаніями. Це коди 9, 10, 13, 14, 41, 42, 90, 91, 125, 126 і 127.

Модель даних

Одне з типових застосувань протоколу - читання і запис даних в регістри контролерів. Специфікація протоколу визначає чотири таблиці даних:

Таблиця Тип елемента Тип доступу
Дискретні входи (англ. Discrete Inputs) Один біт тільки читання
Регістри прапорів (англ. Coils) Один біт читання і запис
Регістри введення (англ. Input Registers) 16-бітне слово тільки читання
Регістри зберігання (англ. Holding Registers) 16-бітне слово читання і запис

Доступ до елементів в кожній таблиці здійснюється за допомогою 16-бітного адреси, першій клітинці відповідає адреса 0. Таким чином, кожна таблиця може містити до 65536 елементів. Специфікація не визначає, що фізично повинні представляти собою елементи таблиць і по яким внутрішнім адресами пристрою вони повинні бути доступні. Наприклад, припустимо організувати перекриваються таблиці, У цьому випадку команди працюють з дискретними даними і з 16-бітними регістрами будуть фактично звертатися до одних і тих же даних.


Слід зазначити, що зі способом адресації даних пов'язана певна плутанина. Modbus був спочатку розроблений для контролерів Modicon. У цих контролерах для кожної з таблиць використовувалася спеціальна нумерація. Наприклад, першому регістру введення відповідав номер комірки 30001, а першому регістру зберігання - 40001. Таким чином, регістру зберігання з адресою 107 в команді Modbus відповідав регістр № 40108 контролера. Хоча така відповідність адрес більше не є частиною стандарту, деякі програмні пакети можуть автоматично «коригувати» вводяться користувачем адреси, наприклад, віднімаючи 40001 з адреси регістра зберігання.