Практична робота з ModBus
Ось ми і дочекалися практичної частини ModBUS. Я сподіваюся, Ви прочитаєте спочаткуминулу статтю про цей протокол і дізнаєтеся чим він гарний і яка практична користь від його використання може бути.
Почнемо з того, що я покажу і назву необхідні залозки, окрім стандартного набору ардуїнщика. Насамперед, для роботи, нам потрібно створити шину RS485 і підключитися до неї. У ролі шини RS485 зазвичай використовують кручену пару для більшої завадостійкості, але в прикладі шина 0.5 м і швидкість використовуємо 9600, так що нам побоку як перешкоди так і термінатори =).
Загалом, шиною у нас будуть стандартні з'єднувальні дроти для макетки. Для підключення ПК до шини – USB-RS485 перехідник (на фото у розібраному вигляді внизу). Ардуїнки підключаємо за допомогою модулів, вони другі зверху. Або використовуючи ADM485, або аналог. Всі подібні схеми мають 8 контактів, 4 з яких до Ардуїнка (до трьох контактів), 2 до харчування і 2 (A, B) - шина.

Далі на фото ми бачимо як проста схема підключення ADM485 до Ардуїнка.

Наступне фото - Додаємо світлодіод, яким балуватимемося.


Чіпляємо окреме живлення для модуля - Кінцевий пристрій готовий.

Тепер нам потрібно завантажити та встановити qModbus Masterлежить тут.
Виставляємо правильний порт, і швидкість 9600. Далі виставляємо Slave ID у двійку - це номер веденого. Він зазначається у вихідниках. Дивимось у код, що нам потрібно слати щоб запалити світлодіод?
Ця функція у нас викликається з loop, в ній ми обробляємо наш масив регістрів, до якого має доступ майстер. Зараз ми робимо лише одне - беремо з першого регістру перший біт і пишаємо його в ledPin. Отже нам потрібно записати біт – це функція 0x05. StartAddress = 0, як ви вже здогадалися. Нижче в таблиці ми ставимо 1 або 0. Натискаємо read/write і світлодіод спалахує або гасне.
Якщо в додатку відкрити bus monitor і в ньому натиснути start, то можна подивитися, що саме шлеться і що надходить у відповідь.
За аналогією, можна виставити або рахувати будь-який пін, задіяти АЦП та ШІМ, керувати сервоприводами. Тема модбасу на цьому далеко не закрита, і в одній із наступних статей ми напишемо повноцінну універсальну прошивку для кінцевих пристроїв на базі Arduino.

/* Скетч для роботи з датчиком руху на мікросхемі biss0001 Джерело: http://tehnopage.ru/ Група Вконтакте https://vk.com/programerge */
// масив даних modbus uint16_t au16data [BUFFER_SIZE];
void setup() // налаштовуємо входи та виходи io_setup(); // налаштовуємо послідовний порт веденого slave.begin(SPEED); // запалюємо світлодіод на 100 мс tempus = millis() + 100; digitalWrite(stlPin, HIGH ); >
void io_setup() digitalWrite(stlPin, HIGH ); digitalWrite(ledPin, LOW); pinMode(stlPin, OUTPUT); pinMode(ledPin, OUTPUT); pinMode(btnPin, INPUT); >
void loop() // обробка повідомлень state = slave.poll(au16data, BUFFER_SIZE); // якщо отримали пакет без помилок - запалюємо світлодіод на 50 мс if (state > 4) tempus = millis() + 50; digitalWrite(stlPin, HIGH); > if (millis() > tempus) digitalWrite(stlPin, LOW ); //оновлюємо дані в регістрах Modbus і в програмі користувача io_poll(); >
void io_poll() // Перший біт першого регістра на ногу ledPin. digitalWrite( ledPin, bitRead( au16data[0], 0 )); >