Arduino: управление лампочками через Modbus и Arduino
Демонстрация моделирования на Arduino UNO простой системы управления лампочками по протоколу Modbus
В этом примере мы хотим показать возможность построения простой системы управления лампочками на плате Arduino UNO по протоколу Modbus. В качестве управляющего звена (Master) будет выступать ваша хост-система, а в качестве звена управления (Slave) выступит Arduino. Принцип работы данной системы управления прост и похож по принципу работы на механическое реле: когда зажжена оранжевая управляющая лампочка, в течение 25 секунд зажигается и гаснет вновь только синяя лампочка. По прошествии 25 секунд гаснет управляющая оранжевая лампочка, после чего начинает зажигаться и гаснуть только зеленая лампочка.
Обратите внимание, перед запуском рассматриваемых моделей необходимо установить пакет поддержки Engee.Интеграции.
Соберем простую электронную схему на трех диодах, чтобы продемонстрировать управление лампочками по протоколу Modbus:

Рассмотрим логику управляющей стороны (Master, ПК)
Модель представлена ниже:

В блоке Modbus RTU Setup настраиваем передачу данных по COM со скоростью 115200 бод, 8 бит, без бита четности, 1 стоповый бит. В качестве адреса Modbus Slave укажем ID = 10.
Генерируем управляющий сигнал HIGH или LOW для оранжевой лампочки посредством блока Pulse Generator и записываем текущее значение генератора в Modbus Coil по адресу 0, что необходимо для регламентированного периода переключения лампочки на Arduino с равными интервалами времени.
Так же мы запрашиваем у Arduino актуальные значения счетчиков состояний лампочек, которые попеременно увеличиваются и сбрасываются при достижении определенного значения - когда необходимо совершить сброс. Переключение состояния лампочки будем производить в середине временного отрезка соответствующего счетчика.
Далее рассмотрим логику управляемой стороны (Slave, Arduino)
Модель представлена ниже:

В блоке Arduino-modbusSetup настраиваем передачу данных со скоростью 115200 бод, 8 бит, без бита четности, 1 стоповый бит, и в качестве канала передачи данных выбираем 0 - единственный доступный на Arduino UNO.
Читаем значение управляющей лампочки посредством Modbus-функции Read Coil. Затем это значение используется для того, чтобы зажечь управляющую оранжевую лампочку, и одновременно с этим инкрементируется счетчик состояния этой лампочки в положении HIGH. Пока управляющая лампочка находится в положении HIGH, мы меняем состояние синей лампочки с периодом, равным половине периода состояния HIGH управляющей лампочки. Как только Pulse Generator на Modbus Master сменит свое состояние с HIGH на LOW, оранжевая управляющая лампочка погаснет, после чего начнет зажигаться и гаснуть уже зеленая лампочка, с периодом, равным половине периода состояния LOW управляющей лампочки. В качестве счетчиков мы используем внутренние регистры Modbus Slave - Read Input Register для чтения значений счетчиков, и Write Input Register для инкрементирования значений этих же счетчиков.
Соответственно, помощью сброса счетчиков, при достижении выбранных предельных значений состояний зажигаемых лампочек, мы регулируем длительность периода нахождения лампочек в состоянии HIGH или LOW.
Заключение
Рассмотренная простейшая система управления лампочками с использованием ПК и Arduino может быть адаптирована под более сложные применения - создание системы освещения помещений "Умный дом", опрос промышленных и пользовательских датчиков по протоколу Modbus.