RadioRadar - Радиоэлектроника, даташиты, схемы

https://www.radioradar.net/radiofan/miscellaneous/programmable_logic_controller_home_automation_part2.html

Программируемый логический контроллер для бытовой автоматики (часть 2)

Переходим к следующему шагу: программное обеспечение (ПО) ПЛК.

Особенность ПО для ПЛК заключается в его названии: по определению универсального ПО не существует, каждый раз ПЛК программируется под конкретную задачу, конкретную логику работы. Даже в случае, когда основная микропрограмма фиксирована, у ПЛК есть свой язык программирования со своим интерфейсом настройки. Такая разработка сильно выходит за рамки простого бытового ПЛК, да и задача описания логики работы на языке программирования AVR сопоставима по сложности с программированием логики работы, например, в среде CodeSys. Поэтому примем, что программирование логики работы будет реализовано через программу на языке Си, а настройка микроконтроллера - загрузкой программы через интерфейс ISP

Не будем касаться деталей, например, относительно использования бут-лоадера и т. п., рассмотрим лишь общие принципы. Предполагается, что далее, возможно, с использованием специальной литературы, читатель напишет логику работы по своим требованиям. Кратко распишем основные блоки, полный исходный текст программы размещён на сайте журнала.

Структурно программа состоит из системных аппаратных настроек и основного цикла. Последний, в свою очередь, состоит из блока опроса входов, логического обработчика, блока установки значения выходов. Предварительно необходимо запрограммировать соответствующие разряды конфигурации на использование внешнего кварцевого резонатора.

Аппаратные настройки включают в себя конфигурирование входов/выходов микроконтроллера, выведенных на многофункциональный разъём в соответствии с алгоритмом их использования, настройку системного интерфейса UART (как минимум для установки ЧРВ) и настройку интерфейса I2C в режиме мастера (табл. 1).

Таблица 1

Скорость работы интерфейса I2C выбрана небольшой, соответствующей минимальной для установленных устройств. Лучше, конечно, настраивать её при каждом обращении к шине.

Главный цикл программы начинается с проверки символа в канале последовательного порта, его обработки (если он есть) и опроса входов. Пример опроса коммуникационного порта приведён в табл. 2.

Таблица 2

Каждому порту ввода соответствует определённый бит в прочитанной переменной. Целесообразно завести два набора переменных, отражающих предыдущие значения входов и новые, чтобы для обработки были доступны четыре состояния: выключатель (предполагаем, что выключатели подключены между выходом и общим проводом) замкнут, разомкнут, был включён, был выключен. Тогда логика работы будет оперировать не с состоянием выключателя, а с действиями с ним (включение, выключение), что даст возможность параллельно управлять выходами как выключателями, так и внешними командами.

Один из выключателей используем для включения режима "имитация присутствия". В этом режиме (проверка нажатого состояния выключателя идёт первой командой логического блока) состояние других выключателей не опрашивается, а из ПЗУ считывается предварительно запрограммированный набор команд включения/выключения выходов с временной меткой, включающей день недели. Если эта метка соответствует времени ЧРВ, устанавливается состояние соответствующего выхода.

В обычном режиме логический блок выполняет стандартные проверки: если выключатель включился, надо активировать соответствующий выход, если выключился - деактивировать. Так, кстати, легко делать любые комбинации "проходных" выключателей.

Можно добавить ещё немного логики, например, выключение режима "имитация присутствия" устанавливает выходы в соответствии с состоянием основных выключателей, а его включение выключает всё освещение в доме. Или как-то иначе.

После блока логики необходимо установить физические выходы в нужное состояние. Тут следует обратить внимание на то, что расширитель PCF8574Р не имеет раздельных режимов ввода или вывода, поэтому биты, соответствующие входам при записи значения в расширитель, необходимо установить в логическую 1, например, как показано в табл. 3 (для DD3).

Таблица 3

На этом разработка своего контроллера завершена. Полученное устройство обладает всеми функциями "настоящего" ПЛК: внутренняя логика работы (причём достаточно сложная), возможность управления внешними командами от домашнего сервера, удобное подключение управляющих сигналов (выключатели) и управляемых устройств (источники света) к контроллеру без внешних колодок, лёгкий доступ к порту программирования для загрузки управляющих программ. И огромные возможности для развития: журналирование включений/выключений освещения, в зависимости от времени включение яркого или дежурного освещения, возможность формирования различных задержек выключения света, обработка внешних датчиков движения с включением сразу света в коридоре и т. д. и т. п.

И это только одно из возможных применений. Выбранная архитектура позволяет разрабатывать исполнительные платы любой сложности без изменений в управляющей, а наличие внешних выводов многофункционального разъёма, напрямую подключённых к микроконтроллеру, - использовать внешние индикаторы (например, на основе TM1637), 1-wire датчики температуры и т. д. Даже сделать подключение к Ethernet через SPI-интерфейс. И не забывайте, сразу было предусмотрено, что ПЛК могут быть объединены друг с другом, это многократно расширяет его возможности.

Автор: И. Решетников, г. Видное Московской обл.