1 2 3 Код функції 0116 − читання статусу Coils (дискретних вихідних бітів). Повідомлення-запит вміщує адресу початкового біту і кількість бітів для читання. Біти нумеруються починаючи з 0. У повідомленні-відповіді кожне значення змінної передається одним бітом, тобто в одному байті пакується статус 8 бітових змінних. Якщо кількість їх не кратно восьми, інші біти в байті заповнюються нулями. Лічильник вміщує кількість байт в полі даних.
Запит: Відповідь:
Код функції 0216 − читання статусу дискретних входів. Формат даного запиту такий же як попереднього, за винятком поля функції. Код функції 0316 − читання значення вихідних/внутрішніх регістрів. Повідомлення-запит вміщує адресу початкового Holdnig Registers (двохбайтове слово), і кількість регістрів для читання. Регістри нумеруються починаючи з 0.
Запит: Відповідь:
У відповідному повідомленні в полі даних кожний регістр передається двома байтами. Код функції 0416 − читання значення вхідних регістрів. Формат даного запиту такий же як попереднього, за винятком поля функції. Код функції 0516 − запис вихідного/внутрішнього біту. В запиті вказується номер бітової змінної та значення: 0 – 0000, а 1 – FF00, всі інші значення не міняють стан змінних. В широкомовній передачі клієнтський запит виставляє значення даної змінної для всіх серверів.
Нормальна відповідь серверу являється повторенням запиту до клієнта. Код функції 0616 − запис вихідного/внутрішнього регістру. Функція аналогічна попередній, але оперує з регістрами(словами). В запиті вказується номер вихідного/внутрішнього регістру та його значення. В широкомовній передачі запит виставляє значення даної змінної для всіх серверів.
Нормальна відповідь сервера являється повторенням запиту клієнту. Код функції 0F16 − запис декількох вихідних/внутрішніх бітів. В запиті вказується початкова адреса біту, кількість біт для запису, лічильник байтів і безпосередньо значення. В широкомовній передачі біти записуються всім серверам. Розглянемо приклад для встановлення наступних бітових вихідних/внутрішніх змінних:
В таблиці показана відповідність адреси змінної, починаючи з 19-ї, і значення біту. Для зручності біти розміщені у тому порядку, що і передаються. В другому байті корисні тільки 2 перші біти, значення інших не буде прийнято до уваги, оскільки кількість бітів вказані у кадрі. Запит та відповідь будуть мати такий вигляд: Запит: Відповідь:
Дана функція забезпечує запис декількох Holding Registers. Напочатку вказується початкова адреса регістру, кількість регістрів, після чого передаються значення самих регістрів. Перед значеннями спочатку передається лічильник байт, що вказує скільки байт слідує за цим полем. Враховуючи, що кожен регістр вміщує 2 байти, лічильник байт буде рівним 2*N, де N – кількість регістрів. Запит: Відповідь:
Код функції 1716 − запис декількох вихідних/внутрішніх регістрів. Дана функція проводить операцію читання та запису за одну MODBUS транзакцію. Функція може записувати нові значення Holding Registers і повертає значення іншої групи Holding Registers. Ця функція підтримується не всіми пристроями з Modbus. У запиті вказується початкова адреса і кількість регістрів для читання, після чого вказується початкова адреса, кількість регістрів і дані для запису. Лічильник байт перед ними для запису вказує на кількість байт, які передаються в полі даних. Запит:
Відповідь.
На рис.8.5 продемонстроване функціонування обміну по протоколу Modbus на прикладі читання 3-х Holdnig Registers, починаючи з 108-го. Слід звернути увагу, що адресація всіх комірок починається з одиниці, але в запитах вказується з нуля. Рис.8.5. Приклад читання Holding Registers з 400108 по 400110 (3 шт) На рис.8.6. показаний приклад позитивного та негативного виконання функції на читання статусу Coils. Також наведений перелік кодів помилок, по причині яких може виникнути така ситуація. Рис.8.6. Приклад позитивного та негативного (з помилкою) обробки запиту Запитання для самоперевірки Якими мережами насьогодні представлений MODBUS? Охарактеризуйте їх у контексті моделі OSI. Розкажіто про основи функціонування MODBUS Application Protocol. Який формат мають повідомлення MODBUS PDU? Які функції використовуються для доступу до даних процесу? Яким чином формуються повідомлення-запити та повідомлення- відповіді для читання та запису діапазону вхідних та вихідних регістрів? Які ситуації можливі при обробці запиту MODBUS клієнта? Наведіть приклад відповіді про помилку. 1 2 3 |