1. Промислові мережі та інтеграційні
технології
Мережі та протокол
MODBUS
реєстрація fieldbus_book@ukr.net
автор і лектор: Олександр Пупена (pupena_san@ukr.net)
зворотній зв’язок по курсу: Інтернет-форум АСУ в Україні (www.asu.in.ua)
30.03.2015 NET - Modbus pupena_san@ukr.net 1
2. Історія Modbus: PLC Modicon
30.03.2015 NET - Modbus pupena_san@ukr.net 2
DO
прикладна
програма
Discrete Outputs
(Coils) 0x
Discrete Inputs
1x
Input Registers
3x
Output (Holding)
Registers 4x
пам'ѐть
DI
AI
AO
PLC Modicon
Створений в 1978 Modicon Inc. (тоді Gould
Electronics зараз в складі Schneider Electric) длѐ
обміну між ПЛК та іншими пристроѐми по
інтерфейсу RS232
Modbus – MODicon BUS
Modicon 984 PLC Memory
Де і коли з'ѐвивсѐ Modbus?
3. Історія Modbus: PLC Modicon деталі адресації
30.03.2015 NET - Modbus pupena_san@ukr.net 3
• Кожна область пам'ѐті (0x, 1x, 3x, 4x)
починається з 1
• область 0x, 1x (біти) – адресаціѐ побітова
• область 3x, 4x (регістри) – адресаціѐ по
словам
• область 1x, 3x (входи) – доступна тільки для
читання
DO
прикладна
програма
Discrete Outputs
(Coils) 0x
Discrete Inputs
1x
Input Registers
3x
Output (Holding)
Registers 4x
пам'ѐть
DI
AI
AO
PLC Modicon
000001
000002
…
100001
100002
…
300001
300002
…
400001
400002
…
У ѐкій послідовності
розміщені дані в Modicon?
4. прикладна
програма
РеалізаціяMODBUS
Історія Modbus: доступ до даних (data) контролерів
Modicon
30.03.2015 NET - Modbus pupena_san@ukr.net 4
ПЛК/ОП/ПК SCADA
читання/запис Coils
читання/запис Holding Registers
читання Discrete Inputs
читання Input Registers
Мережа Modbus
Призначеннѐ – читаннѐ/запис
комірок пам'ѐті контролерів
Modicon, зчитуваннѐ діагностичних
даних
Яке призначеннѐ Modbus?
5. Modbus: розвиток та стандартизація
30.03.2015 NET - Modbus pupena_san@ukr.net 5
Розвиток
• 1978 – виникненнѐ Modbus (поверх RS-232)
• Modbus RTU/ASCII (RS232, RS485 …)
• Modbus + (Modbus Plus)
• Modbus TCP/IP
Стандартизація
• з самого початку – відкритий, став стандартом де-факто
• 2005 - Modbus-IDA (зараз Modbus Organization, Inc)
www.modbus.org
• 2010 - IEC 61784-5-15 specifies the installation profiles for
CPF 15/1 (MODBUS -TCP) and CPF 15/2 (RTPS).
http://webstore.iec.ch/preview/info_iec61784-5-
15%7Bed1.0%7Den.pdf
Як розвивавсѐ?
6. Мережі на основі протоколу Modbus
30.03.2015 NET - Modbus pupena_san@ukr.net 6
www.Modbus.org
Длѐ всіх мереж спільний протокол прикладного рівнѐ* (Application Layer) –
Modbus Protocol
*Протокол прикладного рівнѐ – система
правил взаюмодії прикладних процесів
(програм).
http://modbus.org/docs/Modbus_Application_Protocol_V1_1b3.pdf
Які мережі?
7. Сервіси(функції) Modbus
30.03.2015 NET - Modbus pupena_san@ukr.net 7
Сервіси* (функції)
• читаннѐ Discrete Inputs (1x)
• читаннѐ/запис Coils (0x)
• читаннѐ Input Registers (3x)
• читаннѐ/запис Outputs (Holding) Registers (4x)
• читаннѐ/запис записів файлів
• ідентифікаціѐ пристроя
• читаннѐ діагностичної інформації
• додаткові
Два типи прикладних процесів (програм):
• Modbus Server – виконую Modbus-
функції: надаю доступ до даних
(процесу, діагностичних…) на пристрої
длѐ читаннѐ/запису а також до інших
команд
• Modbus Client – ініціяю виконаннѐ
функцій Modbus Server'а: доступаютьсѐ
до його даних та може ініціявати
виконаннѐ команди на ньому
Modbus Client Modbus Server
обмін даними
процесу
обмін
параметрични
ми даними
діагностичні
сервіси
керування
режимом
пристрою
Комунікаційний сервіс * – послуги, що надаються комунікацією пристрою або
його частиною (мережною картою, драйвером, функцією…). Сервіси прикладного
рівня – послуги що надається прикладним рівнем.
Які сервіси?
8. Modbus архітектура
30.03.2015 NET - Modbus pupena_san@ukr.net 8
різні типи засобів: контролери (PLC), SCADA/HMI,
розподілений ввід/вивід (I/O), електроприводи
(Drive), інші засоби (Device)
Які засоби?
9. Modbus Protocol – відкритий протокол
30.03.2015 NET - Modbus pupena_san@ukr.net 9
• не тільки Modicon (Schneider Electric)
• доступний будь-ѐкому розробнику та інтегратору
• популѐрність (реалізований практично у всіх
брендах)
• реалізовуютьсѐ різними способами (відкритий
програмний код, мікропрограма, частина
операційної системи…)
Modbus
PLCPLC PLCPLC
регулѐторперетворявач
частоти
розподілений
ввід/вивід
SCADA/HMI
Які виробники, тільки Modicon?
10. Приклади моделі даних (data) різних пристроїв,
що підтримують Modbus Protocol
30.03.2015 NET - Modbus pupena_san@ukr.net 10
AI
Q (QW, QX…)
I (IW, IX…)
DB/DI
Timers, Counters…
пам'ѐть
DO
PLC S7 300
РеалізаціяMODBUS
M (MW,MX…)
DI
AO
AI
%IW
%MW
Unlocated
пам'ѐть
DO
PLC M340
РеалізаціяMODBUS
%M
DI
AO
%I
%QW %Q
M1
Перетворявач частоти
пам'ѐть
РеалізаціяMODBUS
задана частота
дійсна частота
напруга на двигуні
струм на двигуні
Засоби зовсім різні, хіба у них не різна модель даних?
11. Модель даних пристроїв vs моделі даних PLC Modicon
30.03.2015 NET - Modbus pupena_san@ukr.net 11
те саме?
те саме?
Це не дискретні
входи чи виходи,
не аналогові
входи чи виходи.
Тоді що це?
Якщо дані пристрої
підтримують
протокол Modbus,
то ми можемо
наприклад
прочитати/записат
и їх дискретні
виходи чи не так?
Хоч це теж Modicon!
12. Доступ до даних пристроїв через Modbus?
30.03.2015 NET - Modbus pupena_san@ukr.net 12
прикладна
програма
До чого тоді ми
звертаємось коли
наприклад читаємо
або пишемо Coils?
В якому розділі
стандарту це можна
дізнатися?
13. Принципи Modbus Mapping (Відображення даних)
30.03.2015 NET - Modbus pupena_san@ukr.net 13
фізична пам'ѐть
Пристрій
РеалізаціѐMODBUS
"віртуальна" пам'ѐть Modbus
Discrete Outputs
(Coils) 0x
Discrete Inputs
1x
Input Registers
3x
Output (Holding)
Registers 4x
читаннѐ Discrete Inputs
читаннѐ Input Registersприкладна
програма
область 1
область 2
область 4
…
область 3
область n
Modbus Mapping
Modbus Mapping (Відображення) – зв'ѐзуваннѐ реальних
даних пристроя до "віртуальних" даних Modbus
Modbus Mapping длѐ пристроїв не визначене в протоколі, і
робиться виробником пристрою довільно (читай
документація до пристроя)
До чого тоді ми звертаємось коли
наприклад читаємо або пишемо Coils?
В якому розділі стандарту це можна
дізнатися?
14. Можливі варіанти Modbus Mapping
30.03.2015 NET - Modbus pupena_san@ukr.net 14
Є якісь "стандартні" підходи до Mapping?
16. Приклади Modbus Mapping (ПЛК VIPA)
30.03.2015 NET - Modbus pupena_san@ukr.net 16
• реалізаціѐ на рівні модулѐ/каналу
та ОС;
• взаюмодіѐ та прив'ѐзка через
функції (SEND/RECV): SEND –
оновленнѐ даних у буфері входів
(1x,3x) або виходів (0x, 4x), RECV –
отриманнѐ даних з буферів
виходів (0x, 4x);
• прѐмий доступ до даних ПЛК
відсутній, тільки через вказівник в
аргументі функції (SEND/RECV)
17. Приклади Modbus Mapping (ПЧ Altivar)
30.03.2015
NET - Modbus pupena_san@ukr.net 17
пам'ѐть
РеалізаціѐMODBUS
"віртуальна" пам'ѐть
Modbus
Output
(Holding)
Registers
4x00001…
змінні контроля,
керуваннѐ,
діагностуваннѐ,
конфігуруваннѐ
Перетворявач частоти ATV31
M1
• реалізаціѐ на рівні модулѐ/каналу
та прошивки;
• жорстка (неналаштовувана)
прив'ѐзка;
• прѐмий доступ до всіх даних
пристроя (використовуютьсѐ длѐ
контроля/керуваннѐ
конфігуруваннѐ та діагностики);
• підтримую тільки читаннѐ/запис
Holding Registers
18. Функціонування протоколу Modbus: запит-відповідь
30.03.2015 NET - Modbus pupena_san@ukr.net 18
Два типи прикладних процесів (програм):
• Modbus Server – виконую Modbus-функції: надаю доступ до даних (процесу, діагностичних…) на пристрої длѐ
читаннѐ/запису а також до інших команд
• Modbus Client – ініціяю виконаннѐ функцій Modbus Server'а: доступаютьсѐ до його даних та може ініціявати
виконаннѐ команди на ньому
Два типи прикладних процесів (програм):
• Modbus Client – ініціяю повідомленнѐ-запити (request) до
Modbus Server'а на виконаннѐ функцій
• Modbus Server – приймаю повідомленнѐ-запити, виконую
вказані в запиті Modbus-функції, та формую повідомленнѐ-
відповідь (response)
Як функціонує Modbus протокол?
19. Приклад запиту на читання Holding Registers
30.03.2015 NET - Modbus pupena_san@ukr.net 19
Discrete Outputs
(Coils) 0x
Discrete Inputs
1x
Input Registers
3x
Output (Holding)
Registers 4x
дані Modbus
MODBUSServer
Modbus
Client
Необхідно прочитати значеннѐ Holding Registers з 400108
по 400110 (3 шт)
1.Запит Кліюнт у до Серверу:
функ
ціѐ
03
читати Holding Registers
00 6B
адреса
початкового
регістру
HI LO
*починаячи з 107
кількість
регістрів
00 03
HI LO
3 штуки
2.Відповідь від Серверу до Кліюнту: відповідь на читаннѐ Holding Registers
функ
ціѐ
03
передая 6 байт
06
лічил
ьник
дані
значеннѐ регістрів
СD 6B
400108-й 400109-й
00 05 00 64
400110-й
*адресаціѐ регістрів починаютьсѐ з 1, але в запиті з 0
1
2
Як проводиться читання?
20. Приклади. Функція 01HEX, 10HEX
30.03.2015 NET - Modbus pupena_san@ukr.net 20
Записати значеннѐ 3-х Holding Registers (400108, 400109, 400110)
кількість
бітів
функ
ціѐ
01 00 13
адреса
початковог
о біту
00 14
HI LO HI LO
повідомлення-запит
значеннѐ бітівфунк
ціѐ
01 03 СD
лічил
ьник
6B
27-20
позитивне повідомлення-
відповідь
39-3635-28
Формат повідомлень длѐ запиту читаннѐ статусу Coils (0x)
05
Як проводиться Coils?
Як проводиться запис Holding Registers?
21. Приклади. Функція 17HEX(23DEC)
30.03.2015 NET - Modbus pupena_san@ukr.net 21
Прочитати значеннѐ 3-х Holding Registers (400108, 400109, 400110) і
записати 400201-й і 400202-й.
А можна прочитати і записати за один запит?
22. Помилка обробки запиту
30.03.2015 NET - Modbus pupena_san@ukr.net 22
кількість
бітів
функ
ціѐ
01 00 13
адреса
початковог
о біту
00 14
HI LO HI LO
повідомлення-запит
значеннѐ бітівфунк
ціѐ
01 03 СD
лічил
ьник
6B
27-20
позитивне повідомлення-
відповідь
39-3635-28
05
Якщо вдале виконання функції
– код функції повторюється у
повідомленні-відповіді
Код Назва Опис
01 ILLEGAL FUNCTION Прийнѐтий код функції не може бути оброблений на Сервері
02
ILLEGAL DATA
ADDRESS
Адреса даних вказана в запиті не доступна даному Серверу .
03
ILLEGAL DATA
VALUE
Величина, вміщена в полі даних запиту ѐвлѐютьсѐ не
допустимоя величиноя длѐ Серверу .
04
SLAVE DEVICE
FAILURE
Невиправна помилка мала місце поки Сервер намагавсѐ
виконати дія запиту.
05 ACKNOWLEDGE
Сервер прийнѐв запит і оброблѐю його, але необхідний
певний час. Цѐ відповідь захищаю Кліюнта від генерації
помилки тайм-ауту.
06 SLAVE DEVICE BUSY
Сервер зайнѐтий обробкоя команди, Кліюнт повинен
повторити запит пізніше.
07
NEGATIVE
ACKNOWLEDGE
Невдалий програмний запит (длѐ функцій 13 і 14).
08
MEMORY PARITY
ERROR
Сервер хоче читати розширену пам’ѐть, але знайшов помилку
паритету.
функ
ціѐ
81 02
код
поми
лки
ERR
відповідь з
помилкою
Якщо НЕвдале виконання функції –
код_функції_у_ відповіді = код_функції_в+запиті + 80HEX
01HEX + 80HEX = 81HEX
А може бути, що запит не обробиться?
ILL DATA
ADDR
23. Змінні Modbus і Коди функцій
30.03.2015 NET - Modbus pupena_san@ukr.net 23
Які ще функції прописані в протоколі Modbus?
24. Мадбаский алфавит
30.03.2015 NET - Modbus pupena_san@ukr.net 24
Спасибо
учител!
Унимательнэе буд !
Трёшки реадай четворкой,
а четворки - тройкой.
А нол - это адин!
Мадбаский алфавит.
asu.in.ua
4x
3x
функ
ціѐ
03 00 00
адреса
початкового
регістру
HI LO
кількість
регістрів
00 03
HI LO
Читаннѐ Holding Registers з 400001
Щось трохи заплутано…
25. HI та LO?
30.03.2015 NET - Modbus pupena_san@ukr.net 25
Терміни big-endian і little-endian запозичено у Джонатана Свіфта з його
сатиричного твору «Мандри Гуллівера», де описуятьсѐ держави
Ліліпутіѐ і Блефуску, що вели між собоя протѐгом багатьох років війни
через розбіжності з приводу того, з ѐкого кінцѐ слід розбивати варені
ѐйцѐ («гострого» чи «тупого» кінцѐ («little-» and «big-endians»)).
функ
ціѐ
03 06
лічил
ьник
значеннѐ регістрів
СD 6B 00 05 00 64
HI LO HI LO HI LO
http://uk.wikipedia.org/wiki/%D0%9F%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA_
%D0%B1%D0%B0%D0%B9%D1%82%D1%96%D0%B2
Motorola-формат
Наприклад Simatic
S7-300/400
Intel-формат
Наприклад Modicon
M340/Premium
Порядок передачі байтів для регістрів визначений протоколом
Modbus - спочатку HI потім LO (big-Endian)!
Що таке HI і LO, навіщо мені про них знати?
Чому саме big-endian і little-endian, причому тут великі та малі
індійці?
26. Проблема доступу до REAL, DOUBLE та інших типів
30.03.2015 NET - Modbus pupena_san@ukr.net 26
фізична пам'ѐть
Пристрій
РеалізаціѐMODBUS
"віртуальна" пам'ѐть Modbus
Discrete Outputs
(Coils) 0x
Discrete Inputs
1x
Input Registers
3x
Output (Holding)
Registers 4x
REAL0…
DINT…
• REAL (4 байти)
• REAL8 (8 байт)
• DINT/UDINT/DWORD (4 байти)
• STRING
• ARRAY
• STRUCTURE
• …
…
HI
функ
ціѐ
03 06
лічил
ьник
два підрѐд регістри –
ѐк одне значеннѐ
СD 6B 00 05
LO HI LO
Для зчитування REAL, DINT, UDINT,
DWORD запитують підряд два
регістри.
HI або LO LO або HI
Який регістр буде йти першим старший чи
молодший, адже це не визначено протоколом?
У моделі пам'яті Modbus немає
таких даних!
Я розумію як читати та писати BOOL, INT/UINT, а як читати інші дані?
27. Доступу до REAL, DOUBLE та інших типів – порядок байт
30.03.2015 NET - Modbus pupena_san@ukr.net 27
функ
ціѐ
03 06
лічил
ьник
значеннѐ регістрів
СD 6B 00 05
HI LO HI LO
HI або LO LO або HI
Порядок регістрів визначається в самих засобах, де
реалізований протокол Modbus!
Який регістр буде йти першим старший чи молодший, адже це не визначено протоколом?
28. REAL, DOUBLE – приклад впливу порядку байт
30.03.2015 NET - Modbus pupena_san@ukr.net 28
НЕспівпадіння на
Клієнті і Сервері
співпадіння на Клієнті і
Сервері
Що буде, якщо я вкажу порядок що не співпадає з джерелом даних?
29. Зміна порядку байт в програмованих контролерах
30.03.2015 NET - Modbus pupena_san@ukr.net 29
У програмованих контролерах порѐдок байт зміняютьсѐ програмно
перед відправкоя чи післѐ прийому. Можна використати функції IEC-
61131-3 ROR та ROL
a_word:=ROL(2#0001_0010_0000_1111,4) -> 2#0010_0000_1111_0001
функ
ціѐ
03 06
лічил
ьник
значеннѐ регістрів
СD 6B 00 05
HI LO HI LO
HI або LO LO або HI
Simatic S7-300/400 Modicon M340
Як це налаштовується в програмованих контролерах?
30. Modbus протокол і мережі
30.03.2015 NET - Modbus pupena_san@ukr.net 30
А як процес передасть дані іншому процесу, якщо вони знаходяться на різних пристроях ?