FLProg – Новая реализация обмена по Modbus RTU
Ранее ещё на хабре я рассказывал о реализации поддержки протокола Modbus в программе FLProg. К сожалению как показала практика его использования, реализация получилась не очень удачная. Если Slave работал ещё более менее уверенно, то мастер работал очень неустойчиво. Кроме того задание адресов регистров было возможно только в виде непрерывного массива, и не было разделения на области памяти. Мастер в той реализации мог обращаться только к Holding Registers слейвов, что очень ограничивало возможности его применения. Достаточно долго я искал нормально реализованную библиотеку Modbus RTU для Arduino, но поиски не привели к успеху. Поэтому было принято решение написать реализацию обмена по Modbus RTU самостоятельно. И вот в недавно вышедшей версии программы FLProg с номером 1.12 это сделано. Что изменилось:
- Реализация Modbus RTU полностью совместима с промышленным стандартом.
- Реализованы четыре таблицы переменных — Coils, Discrete Inputs, Input Registers, Holding Registers. Для каждой переменной, можно задавать любой адрес (не обязательно последовательно).
- Реализована возможность задания адреса слейва, скорости порта и отключения/включения опроса конкретного слейва мастером программным путём с запоминанием этих данных в EEProm.
- Реализована возможность одновременной работы мастера и слейва на одном контроллере (на разных портах).
- Реализована возможность применять в качестве порта SoftwareSerial
- Благодаря динамически генерируемому коду одновременная работа мастера и слейва возможна даже на плате Pro-Mini.
- Реализована прямая совместимость со старыми версиями — ранее созданные проекты будут работать на новой версии без переделки.
В данном уроке я решил сделать, что ни будь реально полезное. Пробежавшись по онлайн — магазинам, я нашёл жертву — будем дублировать датчики и исполнительные устройства на шину RS-485 продающиеся в магазине Wiren Board. Почему они? Да меня просто убили их цены. Особенно возмутила цена на датчики DS18B20. На сайте они честно говорят о китайском их происхождении, и при этом запрашивают 400 рублей. Хотя в Китае даже при розничной продаже их цена 102 рубля. А при оптовой наверняка намного дешевле. Интересно — наценка более 300% — это за поход на почту?
Для начала попробуем повторить «Модуль реле Modbus-RTU Relay Module (WB-MRM2-mini)» — цена 2000 рублей.
Описание модуля.
Комплектующие для создания модуля:
- Arduino Nano — 145 рублей
- Двухканальный модуль реле — 114 рублей
- Модуль RS-485 — 48 рублей
Итого — 307 рублей. Как то дешевле двух тысяч рублей. Я думаю из рассыпухи по оптовым ценам на своей плате себестоимость ещё меньше будет.
Принципиальная схема:
Архив с проектом FLProg и скетчем
Работаем дальше:
Датчик WB-MS-THLS — Измеряет влажность, температуру, освещенность, звуковое давление. — 4900 рублей.
Описание не нашёл. Будем изобретать сами.
Комплектующие для создания модуля:
- Arduino Nano — 145 рублей.
- Модуль RS-485 — 48 рублей
- Датчик DHT-22 -202 рубля
- Датчик освещённости — 66 рублей
- Датчик звука — 66 рублей
Итого: 527 рублей. Чувствуете разницу? Дорогой корпус уж очень получается, зато красивый.
Принципиальная схема:
Архив с проектом FLProg и скетчем
Ну и теперь напоследок соберём устройство, которое будет собирать данные и управлять этими блоками. Для отображения информации и управления будем использовать смартфон на Андроиде. Соединение будет производиться с помощью Bluetooth, а в качестве программного обеспечения будет программа HMI-KaScada. На плате Arduino будет организованна работа Modbus Master (для сбора информации с блоков) и Modbus Slave (для работы с программой HMI-KaScada) одновременно.
Комплектующие для создания модуля:
- Arduino Nano — 145 рублей.
- Модуль RS-485 — 48 рублей
- Модуль HC-05 -234 рубля.
Итого:427 рублей.
Принципиальная схема:
Архив с проектом FLProg и скетчем
Ну что сказать напоследок? Если у Вас есть прямые руки, то многое что продается за большие деньги, можно сделать самому и намного дешевле.