Modbus — комунікаційний протокол, заснований на технології ведучий-ведений (англ. master-slave). Широко застосовується в промисловості для організації зв'язку між електронними пристроями. Може використовувати для передачі даних через послідовні лінії зв'язку RS-485, RS-422, RS-232, а також мережі (TCP/IP) ().
Історія
Modbus був розроблений компанією (в даний час належить Schneider Electric) для використання в її контролерах з програмованою логікою. Вперше специфікація протоколу була опублікована в 1979 році. Це був відкритий стандарт, що описував формат повідомлень і способи їх передачі в мережі, яка складається з різних електронних пристроїв.
Спочатку контролери MODICON використовували послідовний інтерфейс RS-232. Пізніше став застосовуватися інтерфейс RS-485, оскільки він забезпечує більш високу надійність, дозволяє використовувати довші лінії зв'язку і підключати до однієї лінії кілька пристроїв.
Багато виробників електронного устаткування підтримали стандарт, на ринку з'явилися сотні виробів, що його використовували. В наш час розвитком Modbus займається некомерційна організація , створена виробниками та користувачами електронних приладів .
Вступ
Modbus відноситься до протоколів прикладного рівня мережевої моделі OSI. Контролери на шині Modbus взаємодіють, використовуючи master-slave модель, засновану на транзакціях, що складаються із запиту і відповіді.
Зазвичай в мережі є тільки один клієнт, так званий «головний» (англ. master) пристрій, і кілька серверів — «підлеглих» (англ. slaves) пристроїв. Головний пристрій ініціює транзакції (передає запити). Підлеглі пристрої передають запитувані головним пристроєм дані, або виконують запитувані дії. «Головний» може звертатися індивідуально до підлеглого або ініціювати передачу широкомовного повідомлення для всіх підлеглих пристроїв. Підлеглий пристрій формує повідомлення і повертає його у відповідь на запит, адресований саме йому. При отриманні широкомовного запиту відповідь не формується.
Специфікація Modbus описує структуру запитів і відповідей. Їх основа — елементарний пакет протоколу, так званий PDU (Protocol Data Unit). Структура PDU не залежить від типу лінії зв'язку і містить у собі код функції і поле даних. Код функції кодується однобайтовим полем і може приймати значення в діапазоні 1 … 127. Діапазон значень 128 … 255 зарезервований для кодів помилок. Поле даних може бути змінної довжини. Розмір пакета PDU обмежений 253 байтами.
номер функції | дані |
---|---|
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 символи. Для перевірки цілісності використовується алгоритм en: Longitudinal redundancy check. Повідомлення поділяється на стовпці за допомогою символу ": " і закінчується символами нового рядка .
- Modbus
і для передачі даних по мережах 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 від адреси регістра зберігання.
Стандартні функції протоколу Modbus
номер функції | запит / відповідь | |||||
---|---|---|---|---|---|---|
1 (0x01) | A 1 | A 0 | Q 1 | Q 0 | ||
N | D (N байт) | |||||
2 (0x02) | A 1 | A 0 | Q 1 | Q 0 | ||
N | D (N байт) | |||||
3 (0x03) | A 1 | A 0 | Q 1 | Q 0 | ||
N | D (N байт) | |||||
4 (0x04) | A 1 | A 0 | Q 1 | Q 0 | ||
N | D (N байт) | |||||
5 (0x05) | A 1 | A 0 | D 1 | D 0 | ||
A 1 | A 0 | D 1 | D 0 | |||
6 (0x06) | A 1 | A 0 | D 1 | D 0 | ||
A 1 | A 0 | D 1 | D 0 | |||
15 (0x0F) | A 1 | A 0 | Q 1 | Q 0 | N | D (N байт) |
A 1 | A 0 | Q 1 | Q 0 | |||
16 (0x10) | A 1 | A 0 | Q 1 | Q 0 | N | D (N байт) |
A 1 | A 0 | Q 1 | Q 0 |
- A 1 іA 0 — адреса елемента,
- Q 1 іQ 0 — кількість елементів,
- N — кількість байт даних
- D — дані
Читання даних
Для читання значень з перерахованих вище таблиць даних використовуються функції з кодами 1-4 (шістнадцяткові значення 0x01-0x04):
- 1 (0x01)- читання значень з декількох регістрів прапорів(Read Coil Status)
- 2 (0x02)- читання значень з декількох дискретних входів(Read Discrete Inputs)
- 3 (0x03)- читання значень з декількох регістрів зберігання(Read Holding Registers)
- 4 (0x04)- читання значень з декількох регістрів вводу(Read Input Registers)
Запит складається із адреси першого елемента таблиці, яку потрібно прочитати, і кількості зчитуваних елементів. Адреса та кількість даних задаються 16-бітними числами, старший байт кожного з них передається першим.
У відповіді передаються запитані дані. Кількість байт даних залежить від кількості замовлених елементів. Перед даними передається один байт, значення якого дорівнює кількості байт даних.
Значення регістрів зберігання і регістрів вводу передаються починаючи із зазначеної адреси, по два байти на регістр, старший байт кожного регістру передається першим:
байт 1 | байт 2 | байт 3 | байт 4 | … | байт N-1 | байт N |
---|---|---|---|---|---|---|
R A, 1 | R A, 0 | R A +1,1 | R A +1,0 | … | R A + Q-1, 1 | R A + Q-1, 0 |
Значення прапорів і дискретних входів передаються в упакованому вигляді: по одному біту на прапор. Одиниця означає включений стан, нуль — вимкнений. Значення запитаних прапорів заповнюють спочатку перший байт, починаючи з молодшого біта, потім наступні байти, також від молодшого біта до старших. Молодший біт першого байта даних містить значення прапора, зазначеного в полі «адреса». Якщо запитано кількість прапорів, не кратне восьми, то значення додаткових бітів заповнюються нулями:.
байт 1 | … | байт N | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
F A +7 | F A +6 | F A +5 | F A +4 | F A +3 | F A +2 | F A +1 | F A | … | 0 | … | 0 | F A + Q-1 | F A + Q-2 | … |
Запис одного значення
- 5 (0x05)- запис значення одного прапора(Force Single Coil)
- 6 (0x06)- запис значення в один регістр зберігання(Preset Single Register)
Команда складається з адреси елемента (2 байти) і встановлюваного значення (2 байти).
Для регістру зберігання значення є просто 16-бітним словом.
Для прапорів значення 0xFF00 означає включений стан, 0x0000 — вимкнений, інші значення неприпустимі.
Якщо команда виконана успішно, підлеглий пристрій повертає копію запиту.
Запис декількох значень
- 15 (0x0F)- запис значень в кілька регістрів прапорів(Force Multiple Coils)
- 16 (0x10)- запис значень в кілька регістрів зберігання(Preset Multiple Registers)
Команда складається з адреси елемента, кількості змінюваних елементів, кількості переданих байт встановлюваних значень і самих встановлюваних значень. Дані упаковуються так само, як в командах читання даних.
Відповідь складається з початкової адреси і кількості змінених елементів.
Нижче наведено приклад команди ведучого пристрою і відповіді веденого (для Modbus RTU).
Напрямок передачі | 00 адреса підлеглого пристрою | 01 номер функції | 02 Адреса ст. байт | 03 Адреса мол. байт | 04 Кількість прапорів ст. байт | 05 Кількість прапорів мол. байт | 06 Кількість байт даних | 07 Дані (значення для прапорів біти 0-7) | 08 Дані (значення для прапорів біти 8-15) | 09 CRC мол. байт | 0A CRC ст. байт |
---|---|---|---|---|---|---|---|---|---|---|---|
Master → Slave | 0x01 | 0x0F | 0x00 | 0x13 | 0x00 | 0x0A | 0x02 | 0xCD | 0x01 | 0x72 | 0xCB |
Напрямок передачі | 00 адреса підлеглого пристрою | 01 номер функції | 02 Адреса ст. байт | 03 Адреса мол. байт | 04 Кількість прапорів ст. байт | 05 Кількість прапорів мол. байт | 05 CRC мол. байт | 06 CRC ст. байт |
---|---|---|---|---|---|---|---|---|
Slave → Master | 0x01 | 0x0F | 0x00 | 0x13 | 0x00 | 0x0A | 0x24 | 0x09 |
Контроль помилок у протоколі Modbus RTU
Під час обміну даними можуть виникати помилки двох типів:
- Помилки, пов'язані з спотвореннями при передачі даних;
- Логічні помилки.
Помилки першого типу виявляються за допомогою фреймів символів, контролю парності і циклічної контрольної суми CRC-16-IBM (використовується число-поліном = 0xA001). При цьому молодший байт передається першим, на відміну від байтів адреси і значення регістра в PDU
RTU фрейм
У RTU режимі повідомлення має починатися і закінчуватися інтервалом тиші — часом передачі не менше 3.5 символів при даній швидкості в мережі. Першим полем потім передається адреса пристрою.
Слідом за останнім переданим символом також йде інтервал тиші тривалістю не менше 3.5 символів. Нове повідомлення може починатися після цього інтервалу.
Фрейм повідомлення передається безперервно. Якщо інтервал тиші тривалістю 1.5 виник під час передачі фрейму, приймаючий пристрій повинен ігнорувати цей фрейм як неповний.
Таким чином, нове повідомлення повинно починатися не раніше 3.5 інтервалу, оскільки в цьому випадку встановлюється помилка.
Трохи про інтервали (мова йде про Serial Modbus RTU): при швидкості 9600 і 11 бітах в кадрі (стартовий біт + 8 біт даних + біт контролю парності + стоп-біт): 3.5 * 11 / 9600 = 0,00401041 (6), тобто більше 4 мс; 1.5 * 11 / 9600 = 0,00171875, тобто більше 1 мс. Для швидкостей більше 19200 бод допускається використовувати інтервали 1,75 і 0,75 мс відповідно.
Логічні помилки
Для повідомлень про помилки другого типу протокол Modbus RTU передбачає, що пристрої можуть відсилати відповіді, що свідчать про помилкову ситуацію. Ознакою того, що відповідь містить повідомлення про помилку, є встановлений старший біт коду команди. Приклад кадру при виявленні помилки веденим пристроєм, у відповідь на запит наведено в (Таблиця 2-1).
1. Якщо Slave приймає коректний запит і може його нормально обробити, то повертає стандартну відповідь.
2. Якщо Slave не приймає будь-якого значення, ніякої відповіді не відправляється. Master діагностує помилку по тайм-ауту.
3. Якщо Slave приймає запит, але виявляє помилку (parity, LRC, or CRC), ніякої відповіді не відправляється. Master діагностує помилку по тайм-ауту.
4. Якщо Slave приймає запит, але не може його обробити (звернення до неіснуючого регістру і т. д.), відправляється відповідь, що містить у собі дані про помилку.
Напрямок передачі | Адресу підлеглого пристрою | Номер функції | Дані (або код помилки) | CRC |
---|---|---|---|---|
Запит (Master → Slave) | 0x01 | 0x77 | 0xDD | 0xC7 0xA9 |
Відповідь (Slave → Master) | 0x01 | 0xF7 | 0xEE | 0xE6 0x7C |
Стандартні коди помилок
- 01 — Прийнятий код функції не може бути опрацьований на підлеглому пристрої.
- 02 — Адреса даних, вказаних у запиті, не доступна даному підлеглому пристрою.
- 03 — Величина, що міститься в полі даних запиту, є неприпустимою величиною для підлеглого пристрою.
- 04 — невідновлювальна помилка мала місце, поки підлеглий пристрій намагався виконати запрошену дію.
- 05 — Підлеглий пристрій прийняв запит і обробляє його, але це вимагає багато часу. Ця відповідь оберігає головного від генерації помилки тайм-ауту.
- 06 — Підлеглий пристрій зайнятий обробкою команди. Головний повинен повторити повідомлення пізніше, коли підлеглий звільниться.
- 07 — Підлеглий пристрій не може виконати програмну функцію, прийняту в запиті. Цей код повертається для невдалого програмного запиту, що використовує функції з номерами 13 або 14. Головний повинен запросити діагностичну інформацію або інформацію про помилки з підлеглого.
- 08 — Підлеглий пристрій намагається читати розширену пам'ять, але виявив помилку паритету. Головний може повторити запит, але звичайно в таких випадках потрібний ремонт.
Примітки
- . Архів оригіналу за 3 березня 2011. Процитовано 4 травня 2011.
- . Архів оригіналу за 3 березня 2016. Процитовано 4 травня 2011.
- . Архів оригіналу за 4 травня 2011. Процитовано 4 травня 2011.
Посилання на використані в статті джерела
- Навчальні матеріали [ 3 квітня 2011 у Wayback Machine.]
- Modbus-IDA некомерційна організація, яка підтримує цей протокол [ 20 серпня 2015 у Wayback Machine.]
- Оригінальні специфікації протоколу англійською мовою [ 16 липня 2011 у Wayback Machine.]
- Modbus Specifications and Implementation Guides (ModBus TCP \\ IP) [ 12 лютого 2011 у Wayback Machine.]
- Введення в Modbus протокол [недоступне посилання з червня 2019]
- Опис стандартного протоколу ModBus англійською мовою [ 1 червня 2002 у Wayback Machine.]
- Бібліотека для роботи з протоколом modbus в GNU / Linux [ 1 травня 2011 у Wayback Machine.]
- Як Modbus працює [ 6 вересня 2012 у Wayback Machine.]
- Site for software developers which develop, test modbus protocol in drivers, devices, PLC etc. [ 29 червня 2011 у Wayback Machine.]
- FreeModbus — ASCII / RTU і TCP для мікроконтролерів [ 31 серпня 2018 у Wayback Machine.]
Утиліти
- Реалізація протоколу на мові LabVIEW [ 23 квітня 2011 у Wayback Machine.] — Бібліотека Vi
- Утиліта опитування і запису даних за протоколом Modbus RTU / ASCII [недоступне посилання з червня 2019] — Некоректно формує запити по TCP/IP (не за Modbus TCP \\ IP Specifications and Implementation [ 12 лютого 2011 у Wayback Machine.])
- modpoll (Master) (win32, linux, solaris, qnx6) [ 20 вересня 2011 у Wayback Machine.] — Безкоштовна консольна утиліта опитування і запису даних за протоколом Modbus RTU / ASCII / TCP \\ IP; досить зручна, але код виходу програми (при правильних параметрах) завжди 0 (версія 2.4.0) навіть якщо Slave повернув код помилки на запит (обіцяно виправити у наступному релізі).
- PeakHMI MODBUS TCP/IP Slave simulator (Win GUI) — Безкоштовна і дуже зручна утиліта, симулятор ModBus TCP/IP Slave
- Simply Modbus [ 23 квітня 2011 у Wayback Machine.] — Програма випробування Modbus.
- — Вільна реалізація протоколу на Ruby.
- NModbus [ 7 березня 2011 у Wayback Machine.] — Реалізація протоколу Modbus на мові C #.
- Сторож [ 5 лютого 2012 у Wayback Machine.] — Гнучка система диспетчеризації під Linux з підтримкою протоколу MODBUS.
- — Легке у роботі середовище конфігурування пристроїв з протоколом MODBUS
- MODBUS OPC сервер [ 20 березня 2011 у Wayback Machine.] — Зручний OPC сервер MODBUS від ReLab Software
Це незавершена стаття про інформаційні технології. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Modbus komunikacijnij protokol zasnovanij na tehnologiyi veduchij vedenij angl master slave Shiroko zastosovuyetsya v promislovosti dlya organizaciyi zv yazku mizh elektronnimi pristroyami Mozhe vikoristovuvati dlya peredachi danih cherez poslidovni liniyi zv yazku RS 485 RS 422 RS 232 a takozh merezhi TCP IP IstoriyaModbus buv rozroblenij kompaniyeyu v danij chas nalezhit Schneider Electric dlya vikoristannya v yiyi kontrolerah z programovanoyu logikoyu Vpershe specifikaciya protokolu bula opublikovana v 1979 roci Ce buv vidkritij standart sho opisuvav format povidomlen i sposobi yih peredachi v merezhi yaka skladayetsya z riznih elektronnih pristroyiv Spochatku kontroleri MODICON vikoristovuvali poslidovnij interfejs RS 232 Piznishe stav zastosovuvatisya interfejs RS 485 oskilki vin zabezpechuye bilsh visoku nadijnist dozvolyaye vikoristovuvati dovshi liniyi zv yazku i pidklyuchati do odniyeyi liniyi kilka pristroyiv Bagato virobnikiv elektronnogo ustatkuvannya pidtrimali standart na rinku z yavilisya sotni virobiv sho jogo vikoristovuvali V nash chas rozvitkom Modbus zajmayetsya nekomercijna organizaciya stvorena virobnikami ta koristuvachami elektronnih priladiv VstupModbus vidnositsya do protokoliv prikladnogo rivnya merezhevoyi modeli OSI Kontroleri na shini Modbus vzayemodiyut vikoristovuyuchi master slave model zasnovanu na tranzakciyah sho skladayutsya iz zapitu i vidpovidi Zazvichaj v merezhi ye tilki odin kliyent tak zvanij golovnij angl master pristrij i kilka serveriv pidleglih angl slaves pristroyiv Golovnij pristrij iniciyuye tranzakciyi peredaye zapiti Pidlegli pristroyi peredayut zapituvani golovnim pristroyem dani abo vikonuyut zapituvani diyi Golovnij mozhe zvertatisya individualno do pidleglogo abo iniciyuvati peredachu shirokomovnogo povidomlennya dlya vsih pidleglih pristroyiv Pidleglij pristrij formuye povidomlennya i povertaye jogo u vidpovid na zapit adresovanij same jomu Pri otrimanni shirokomovnogo zapitu vidpovid ne formuyetsya Specifikaciya Modbus opisuye strukturu zapitiv i vidpovidej Yih osnova elementarnij paket protokolu tak zvanij PDU Protocol Data Unit Struktura PDU ne zalezhit vid tipu liniyi zv yazku i mistit u sobi kod funkciyi i pole danih Kod funkciyi koduyetsya odnobajtovim polem i mozhe prijmati znachennya v diapazoni 1 127 Diapazon znachen 128 255 zarezervovanij dlya kodiv pomilok Pole danih mozhe buti zminnoyi dovzhini Rozmir paketa PDU obmezhenij 253 bajtami Modbus PDU nomer funkciyi dani 1 bajt N lt 253 bajt Dlya peredachi paketu po fizichnih liniyah zv yazku PDU pomishayetsya v inshij paket sho mistit dodatkovi polya Cej paket maye nazvu ADU Application Data Unit Format ADU zalezhit vid tipu liniyi zv yazku Isnuyut tri osnovni realizaciyi protokolu Modbus dvi dlya peredachi danih po poslidovnih liniyah zv yazku yak midnim EIA TIA 232 E RS 232 EIA 422 EIA TIA 485 A RS 485 tak i optichnim i radio Modbus ASCII dlya obminu vikoristovuyutsya tilki ASCII simvoli Dlya perevirki cilisnosti vikoristovuyetsya algoritm en Longitudinal redundancy check Povidomlennya podilyayetsya na stovpci za dopomogoyu simvolu i zakinchuyetsya simvolami novogo ryadka Modbus i dlya peredachi danih po merezhah Ethernet poverh TCP IP Modbus TCP Zagalna struktura ADU nastupna u zalezhnosti vid realizaciyi deyaki z poliv mozhut buti vidsutni adresa pidleglogo pristroyu kod funkciyi dani blok viyavlennya pomilok de Adresa pidleglogo pristroyu adresa pidleglogo pristroyu do yakogo adresovano zapit Pidlegli pristroyi vidpovidayut tilki na zapiti sho nadijshli na yih adresu Vidpovid takozh pochinayetsya z adresi vidpovidnogo pidleglogo pristroyu yakij mozhe zminyuvatisya vid 1 do 247 Adresa 0 vikoristovuyetsya dlya shirokomovnoyi peredachi yiyi rozpiznaye kozhen pristrij adresi v diapazoni 248 255 zarezervovani Nomer funkciyi ce nastupne odnobajtne pole kadru Vono govorit pidleglomu pristroyu yaki dani abo vikonannya yakoyi diyi vimagaye vid nogo veduchij pristrij Dani pole mistit informaciyu neobhidnu pidleglomu pristroyu dlya vikonannya zadanoyi majstrom funkciyi abo mistit dani sho peredayutsya pidleglim pristroyem u vidpovid na zapit veduchogo Dovzhina i format polya zalezhit vid nomera funkciyi Blok viyavlennya pomilok kontrolna suma dlya perevirki vidsutnosti pomilok v kadri Maksimalnij rozmir ADU dlya poslidovnih merezh RS232 RS485 256 bajt dlya merezh TCP 260 bajt Dlya Modbus TCP ADU viglyadaye nastupnim chinom id tranzakciyi id protokolu dovzhina paketu adresa pidleglogo pristroyu kod funkciyi dani de Id tranzakciyi dva bajti zazvichaj nuli Id protokolu dva bajti nuli Dovzhina paketu dva bajti starshij potim molodshij dovzhina nastupnoyi za cim polem chastini paketa Adresu vidomogo pristroyu adresa pidleglogo pristroyu do yakogo adresovano zapit Zazvichaj ignoruyetsya yaksho z yednannya vstanovleno z pevnim pristroyem Mozhe vikoristovuvatisya yaksho z yednannya vstanovleno z mostom yakij vivodit nas napriklad v merezhu RS485 Pole kontrolnoyi sumi v Modbus TCP vidsutnye Kategoriyi kodiv funkcijU diyuchij v nash chas koli specifikaciyi protokolu viznachayutsya tri kategoriyi kodiv funkcij Standartni komandi Yih opis maye buti opublikovano ta zatverdzheno Modbus IDA Cya kategoriya mistit yak vzhe isnuyuchi tak i vilni v nash chas koli kodi Koristuvacki komandi Dva diapazoni kodiv vid 65 do 72 i vid 100 do 110 dlya yakih koristuvach mozhe realizuvati dovilnu funkciyu Pri comu ne garantuyetsya sho yakijs inshij pristrij ne bude vikoristovuvati toj zhe samij kod dlya vikonannya inshoyi funkciyi Zarezervovani U cyu kategoriyu vhodyat kodi funkcij yaki ne ye standartnimi ale vzhe vikoristovuyutsya v pristroyah sho viroblyayutsya riznimi kompaniyami Ce kodi 9 10 13 14 41 42 90 91 125 126 i 127 Model danihOdne z tipovih zastosuvan protokolu chitannya i zapis danih v registri kontroleriv Specifikaciya protokolu viznachaye chotiri tablici danih Tablicya Tip elementa Tip dostupu Diskretni vhodi angl Discrete Inputs Odin bit tilki chitannya Registri praporiv angl Coils Odin bit chitannya i zapis Registri vvodu angl Input Registers 16 bitne slovo tilki chitannya Registri zberigannya angl Holding Registers 16 bitne slovo chitannya i zapis Dostup do elementiv v kozhnij tablici zdijsnyuyetsya za dopomogoyu 16 bitnoyi adresi pershij komirci vidpovidaye adresa 0 Takim chinom kozhna tablicya mozhe mistiti do 65536 elementiv Specifikaciya ne viznachaye sho fizichno povinni predstavlyati soboyu elementi tablic i po yakih vnutrishnih adresah pristroyu voni povinni buti dostupni Napriklad pripustimo organizuvati tablici z perekrittyam U comu vipadku komandi pracyuyut z diskretnimi danimi i z 16 bitnimi registrami budut faktichno zvertatisya do odnih i tih zhe danih Slid zaznachiti sho zi sposobom adresaciyi danih pov yazana pevna plutanina Modbus buv spochatku rozroblenij dlya kontroleriv Modicon U cih kontrolerah dlya kozhnoyi z tablic vikoristovuvalasya specialna numeraciya Napriklad pershomu registru vvodu vidpovidav nomer komirki 30001 a pershomu registru zberigannya 40001 Takim chinom registru zberigannya z adresoyu 107 v komandi Modbus vidpovidav registr 40108 kontrolera Hocha taka vidpovidnist adres bilshe ne ye chastinoyu standartu deyaki programni paketi mozhut avtomatichno koriguvati vvedeni koristuvachem adresi napriklad vidnimayuchi 40001 vid adresi registra zberigannya Standartni funkciyi protokolu ModbusPDU zapitu i vidpovidi dlya standartnih funkcij nomer funkciyi zapit vidpovid 1 0x01 A 1 A 0 Q 1 Q 0 N D N bajt 2 0x02 A 1 A 0 Q 1 Q 0 N D N bajt 3 0x03 A 1 A 0 Q 1 Q 0 N D N bajt 4 0x04 A 1 A 0 Q 1 Q 0 N D N bajt 5 0x05 A 1 A 0 D 1 D 0 A 1 A 0 D 1 D 0 6 0x06 A 1 A 0 D 1 D 0 A 1 A 0 D 1 D 0 15 0x0F A 1 A 0 Q 1 Q 0 N D N bajt A 1 A 0 Q 1 Q 0 16 0x10 A 1 A 0 Q 1 Q 0 N D N bajt A 1 A 0 Q 1 Q 0 A 1 iA 0 adresa elementa Q 1 iQ 0 kilkist elementiv N kilkist bajt danih D dani Chitannya danih Dlya chitannya znachen z pererahovanih vishe tablic danih vikoristovuyutsya funkciyi z kodami 1 4 shistnadcyatkovi znachennya 0x01 0x04 1 0x01 chitannya znachen z dekilkoh registriv praporiv Read Coil Status 2 0x02 chitannya znachen z dekilkoh diskretnih vhodiv Read Discrete Inputs 3 0x03 chitannya znachen z dekilkoh registriv zberigannya Read Holding Registers 4 0x04 chitannya znachen z dekilkoh registriv vvodu Read Input Registers Zapit skladayetsya iz adresi pershogo elementa tablici yaku potribno prochitati i kilkosti zchituvanih elementiv Adresa ta kilkist danih zadayutsya 16 bitnimi chislami starshij bajt kozhnogo z nih peredayetsya pershim U vidpovidi peredayutsya zapitani dani Kilkist bajt danih zalezhit vid kilkosti zamovlenih elementiv Pered danimi peredayetsya odin bajt znachennya yakogo dorivnyuye kilkosti bajt danih Znachennya registriv zberigannya i registriv vvodu peredayutsya pochinayuchi iz zaznachenoyi adresi po dva bajti na registr starshij bajt kozhnogo registru peredayetsya pershim bajt 1 bajt 2 bajt 3 bajt 4 bajt N 1 bajt N R A 1 R A 0 R A 1 1 R A 1 0 R A Q 1 1 R A Q 1 0 Znachennya praporiv i diskretnih vhodiv peredayutsya v upakovanomu viglyadi po odnomu bitu na prapor Odinicya oznachaye vklyuchenij stan nul vimknenij Znachennya zapitanih praporiv zapovnyuyut spochatku pershij bajt pochinayuchi z molodshogo bita potim nastupni bajti takozh vid molodshogo bita do starshih Molodshij bit pershogo bajta danih mistit znachennya prapora zaznachenogo v poli adresa Yaksho zapitano kilkist praporiv ne kratne vosmi to znachennya dodatkovih bitiv zapovnyuyutsya nulyami bajt 1 bajt N F A 7 F A 6 F A 5 F A 4 F A 3 F A 2 F A 1 F A 0 0 F A Q 1 F A Q 2 Zapis odnogo znachennya 5 0x05 zapis znachennya odnogo prapora Force Single Coil 6 0x06 zapis znachennya v odin registr zberigannya Preset Single Register Komanda skladayetsya z adresi elementa 2 bajti i vstanovlyuvanogo znachennya 2 bajti Dlya registru zberigannya znachennya ye prosto 16 bitnim slovom Dlya praporiv znachennya 0xFF00 oznachaye vklyuchenij stan 0x0000 vimknenij inshi znachennya nepripustimi Yaksho komanda vikonana uspishno pidleglij pristrij povertaye kopiyu zapitu Zapis dekilkoh znachen 15 0x0F zapis znachen v kilka registriv praporiv Force Multiple Coils 16 0x10 zapis znachen v kilka registriv zberigannya Preset Multiple Registers Komanda skladayetsya z adresi elementa kilkosti zminyuvanih elementiv kilkosti peredanih bajt vstanovlyuvanih znachen i samih vstanovlyuvanih znachen Dani upakovuyutsya tak samo yak v komandah chitannya danih Vidpovid skladayetsya z pochatkovoyi adresi i kilkosti zminenih elementiv Nizhche navedeno priklad komandi veduchogo pristroyu i vidpovidi vedenogo dlya Modbus RTU Napryamok peredachi 00 adresa pidleglogo pristroyu 01 nomer funkciyi 02 Adresa st bajt 03 Adresa mol bajt 04 Kilkist praporiv st bajt 05 Kilkist praporiv mol bajt 06 Kilkist bajt danih 07 Dani znachennya dlya praporiv biti 0 7 08 Dani znachennya dlya praporiv biti 8 15 09 CRC mol bajt 0A CRC st bajt Master Slave 0x01 0x0F 0x00 0x13 0x00 0x0A 0x02 0xCD 0x01 0x72 0xCB Napryamok peredachi 00 adresa pidleglogo pristroyu 01 nomer funkciyi 02 Adresa st bajt 03 Adresa mol bajt 04 Kilkist praporiv st bajt 05 Kilkist praporiv mol bajt 05 CRC mol bajt 06 CRC st bajt Slave Master 0x01 0x0F 0x00 0x13 0x00 0x0A 0x24 0x09Kontrol pomilok u protokoli Modbus RTUPid chas obminu danimi mozhut vinikati pomilki dvoh tipiv Pomilki pov yazani z spotvorennyami pri peredachi danih Logichni pomilki Pomilki pershogo tipu viyavlyayutsya za dopomogoyu frejmiv simvoliv kontrolyu parnosti i ciklichnoyi kontrolnoyi sumi CRC 16 IBM vikoristovuyetsya chislo polinom 0xA001 Pri comu molodshij bajt peredayetsya pershim na vidminu vid bajtiv adresi i znachennya registra v PDU RTU frejm U RTU rezhimi povidomlennya maye pochinatisya i zakinchuvatisya intervalom tishi chasom peredachi ne menshe 3 5 simvoliv pri danij shvidkosti v merezhi Pershim polem potim peredayetsya adresa pristroyu Slidom za ostannim peredanim simvolom takozh jde interval tishi trivalistyu ne menshe 3 5 simvoliv Nove povidomlennya mozhe pochinatisya pislya cogo intervalu Frejm povidomlennya peredayetsya bezperervno Yaksho interval tishi trivalistyu 1 5 vinik pid chas peredachi frejmu prijmayuchij pristrij povinen ignoruvati cej frejm yak nepovnij Takim chinom nove povidomlennya povinno pochinatisya ne ranishe 3 5 intervalu oskilki v comu vipadku vstanovlyuyetsya pomilka Trohi pro intervali mova jde pro Serial Modbus RTU pri shvidkosti 9600 i 11 bitah v kadri startovij bit 8 bit danih bit kontrolyu parnosti stop bit 3 5 11 9600 0 00401041 6 tobto bilshe 4 ms 1 5 11 9600 0 00171875 tobto bilshe 1 ms Dlya shvidkostej bilshe 19200 bod dopuskayetsya vikoristovuvati intervali 1 75 i 0 75 ms vidpovidno Logichni pomilki Dlya povidomlen pro pomilki drugogo tipu protokol Modbus RTU peredbachaye sho pristroyi mozhut vidsilati vidpovidi sho svidchat pro pomilkovu situaciyu Oznakoyu togo sho vidpovid mistit povidomlennya pro pomilku ye vstanovlenij starshij bit kodu komandi Priklad kadru pri viyavlenni pomilki vedenim pristroyem u vidpovid na zapit navedeno v Tablicya 2 1 1 Yaksho Slave prijmaye korektnij zapit i mozhe jogo normalno obrobiti to povertaye standartnu vidpovid 2 Yaksho Slave ne prijmaye bud yakogo znachennya niyakoyi vidpovidi ne vidpravlyayetsya Master diagnostuye pomilku po tajm autu 3 Yaksho Slave prijmaye zapit ale viyavlyaye pomilku parity LRC or CRC niyakoyi vidpovidi ne vidpravlyayetsya Master diagnostuye pomilku po tajm autu 4 Yaksho Slave prijmaye zapit ale ne mozhe jogo obrobiti zvernennya do neisnuyuchogo registru i t d vidpravlyayetsya vidpovid sho mistit u sobi dani pro pomilku Tablicya 2 1 Kadr vidpovidi Slave Master pri viniknenni pomilki modbus RTU Napryamok peredachi Adresu pidleglogo pristroyu Nomer funkciyi Dani abo kod pomilki CRC Zapit Master Slave 0x01 0x77 0xDD 0xC7 0xA9 Vidpovid Slave Master 0x01 0xF7 0xEE 0xE6 0x7C Standartni kodi pomilok 01 Prijnyatij kod funkciyi ne mozhe buti opracovanij na pidleglomu pristroyi 02 Adresa danih vkazanih u zapiti ne dostupna danomu pidleglomu pristroyu 03 Velichina sho mistitsya v poli danih zapitu ye nepripustimoyu velichinoyu dlya pidleglogo pristroyu 04 nevidnovlyuvalna pomilka mala misce poki pidleglij pristrij namagavsya vikonati zaproshenu diyu 05 Pidleglij pristrij prijnyav zapit i obroblyaye jogo ale ce vimagaye bagato chasu Cya vidpovid oberigaye golovnogo vid generaciyi pomilki tajm autu 06 Pidleglij pristrij zajnyatij obrobkoyu komandi Golovnij povinen povtoriti povidomlennya piznishe koli pidleglij zvilnitsya 07 Pidleglij pristrij ne mozhe vikonati programnu funkciyu prijnyatu v zapiti Cej kod povertayetsya dlya nevdalogo programnogo zapitu sho vikoristovuye funkciyi z nomerami 13 abo 14 Golovnij povinen zaprositi diagnostichnu informaciyu abo informaciyu pro pomilki z pidleglogo 08 Pidleglij pristrij namagayetsya chitati rozshirenu pam yat ale viyaviv pomilku paritetu Golovnij mozhe povtoriti zapit ale zvichajno v takih vipadkah potribnij remont Primitki Arhiv originalu za 3 bereznya 2011 Procitovano 4 travnya 2011 Arhiv originalu za 3 bereznya 2016 Procitovano 4 travnya 2011 Arhiv originalu za 4 travnya 2011 Procitovano 4 travnya 2011 Posilannya na vikoristani v statti dzherelaNavchalni materiali 3 kvitnya 2011 u Wayback Machine Modbus IDA nekomercijna organizaciya yaka pidtrimuye cej protokol 20 serpnya 2015 u Wayback Machine Originalni specifikaciyi protokolu anglijskoyu movoyu 16 lipnya 2011 u Wayback Machine Modbus Specifications and Implementation Guides ModBus TCP IP 12 lyutogo 2011 u Wayback Machine Vvedennya v Modbus protokol nedostupne posilannya z chervnya 2019 Opis standartnogo protokolu ModBus anglijskoyu movoyu 1 chervnya 2002 u Wayback Machine Biblioteka dlya roboti z protokolom modbus v GNU Linux 1 travnya 2011 u Wayback Machine Yak Modbus pracyuye 6 veresnya 2012 u Wayback Machine Site for software developers which develop test modbus protocol in drivers devices PLC etc 29 chervnya 2011 u Wayback Machine FreeModbus ASCII RTU i TCP dlya mikrokontroleriv 31 serpnya 2018 u Wayback Machine UtilitiRealizaciya protokolu na movi LabVIEW 23 kvitnya 2011 u Wayback Machine Biblioteka Vi Utilita opituvannya i zapisu danih za protokolom Modbus RTU ASCII nedostupne posilannya z chervnya 2019 Nekorektno formuye zapiti po TCP IP ne za Modbus TCP IP Specifications and Implementation 12 lyutogo 2011 u Wayback Machine modpoll Master win32 linux solaris qnx6 20 veresnya 2011 u Wayback Machine Bezkoshtovna konsolna utilita opituvannya i zapisu danih za protokolom Modbus RTU ASCII TCP IP dosit zruchna ale kod vihodu programi pri pravilnih parametrah zavzhdi 0 versiya 2 4 0 navit yaksho Slave povernuv kod pomilki na zapit obicyano vipraviti u nastupnomu relizi PeakHMI MODBUS TCP IP Slave simulator Win GUI Bezkoshtovna i duzhe zruchna utilita simulyator ModBus TCP IP Slave Simply Modbus 23 kvitnya 2011 u Wayback Machine Programa viprobuvannya Modbus Vilna realizaciya protokolu na Ruby NModbus 7 bereznya 2011 u Wayback Machine Realizaciya protokolu Modbus na movi C Storozh 5 lyutogo 2012 u Wayback Machine Gnuchka sistema dispetcherizaciyi pid Linux z pidtrimkoyu protokolu MODBUS Legke u roboti seredovishe konfiguruvannya pristroyiv z protokolom MODBUS MODBUS OPC server 20 bereznya 2011 u Wayback Machine Zruchnij OPC server MODBUS vid ReLab Software Ce nezavershena stattya pro informacijni tehnologiyi Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi