Диплом: Разработка программного обеспечения алгоритмического управления для систем автоматизации зданий

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
32
На данной схеме выход порта контроллера, через силовой элемент
(силовой ключ или релейный блок) подключается параллельно кнопкам
управления.
При подключении кнопки без бистабильного реле мы используем тот
же принцип «подтягивания», но на этот раз нам нужно организовать на порту
ввода/вывода логический ноль, поэтому «подтягиваем» к земле.
Еще один важный момент, о котором необходимо сказать – дребезг
контактов кнопки. Поскольку не существует идеально включающихся групп
контактов, требуется избавиться от дребезга перед считыванием состояния с
порта контроллера.
Сама природа дребезга заключается в многократном замыкании и
размыкании контактов за счет упругости материалов, из которых
изготовлены контактные группы. Время механических колебаний зависит от
размеров, массы и материала, из которого изготовлена контактная группа и
составляет, как правило, от 1 до 100-200 мс.
В нашем случае основная проблема, создаваемая дребезгом контактов –
неопределенность снимаемых с порта ввода/вывода контроллера данных.
Сигнал с кнопки в момент ее нажатия имеет вид, представленный на рисунке
18.
Рисунок 18. График уровня сигнала при нажатии на кнопку,
показывающий наличие дребезга контактов.
33
На этапе проработки схемы включения различных компонентов был
предусмотрен электрический фильтр, частично убирающий эффект дребезга
контактов. Для этого в схему был включен конденсатор малой емкости,
главной задачей которого является сглаживание колебаний, выдавая в порт
ввода/вывода стабильный сигнал.
Данный фильтр полезен, но может быть недостаточен, при
использовании контактных групп с большим временем механических
колебаний. По этой причине в коде обработчика на контроллере ESP8266
внедрен дополнительный механизм устранения дребезга c использованием
библиотеки Bounce2.
При работе с некоторыми типами нагрузок или с определенными
типами подключений нагрузок, например управление нагрузкой с
использованием бистабильного реле, крайне полезно использовать датчик
напряжения, подключенный параллельно нагрузке. Данный датчик должен
выдавать на выходе сигнал, который будет восприниматься
микроконтроллером как логическая единица.
Схема датчика представлена на рисунке 19.
Рисунок 19. Схема датчика напряжения.
Датчик представляет из себя делитель с подключенной к нему
отпопарой для обеспечения гальванической развязки с силовой линией.
На выходе делителя, в случае наличия напряжения на нагрузке
получаем напряжение, заданное характеристиками стабилитрона. В нашем
случае параметры на выходе делителя должны обеспечивать стабильную
34
работу оптопары. Далее при подключении оптопары использован
ограничивающий резистор. В некоторых оптопарах данный резистор
встроен. Электролитический конденсатор необходим для устранения
мерцания светодиода в оптопаре, поскольку на выходе с делителя мы имеем
половину периода переменного тока.
Так же в качестве датчика напряжения так же можно использовать
компактные блоки питания типа TSP-05, TSP-05. Представлен на рисунке 20.
Рисунок 20. Компактный блок питания TSP-03
Данный блок питания отличается компактными размерами, стабильной
работой. К минусам данного варианта можно отнести отсутствие
гальванической развязки при использовании в качестве датчика напряжения.
Для обеспечения гальванической развязки дополнительно необходимо
подключать оптопару.
ГЛАВА 3. Разработка программных модулей
3.1 Разработка унифицированного программного обеспечения
для модулей ESP8266.
Разработка программного обеспечения для модулей ESP8266 ведется в
среде разработки Arduino IDE. Данная среда разработки позволяет создавать
программное обеспечение на языке С++, использовать большое количество
библиотек для работы с различными устройствами, а так же предоставляет
необходимый и удобный функционал для отладки ПО.
35
При проектировании структуры ПО модуля весь код был разбит на
отдельные составляющие, вынесенные в отдельные функции внутри кода:
1. Первоначальная настройка модуля при его старте
2. Система инициализации системы, организация хранения данных
о конфигурации системы в энергонезависимой памяти.
3. Система обработки информации, поступающей извне
4. Обработчики данных:
a. Опрос датчиков ds1820, интерпретация и обработка
поступивших данных
b. Опрос dht22 и обработка поступившей информации
c. Обработка счетчика, привязанного к кнопке.
d. Обработка команд на выполнение действий в системе.
e. Обработка счетчика импульсов
Общение отдельных модулей ESP8266 с внешним миром
осуществляется по протоколу HTTP (или HTTPS), но с использованием 81
порта TCP. Это сделано для упрощения операций поиска новых устройств в
системе и избавляет от ненужного анализа данных, которые могут поступить
с Web серверов, расположенных в сети. В принципе, можно использовать
любой TCP порт для поднятия web сервера на модуле.
По сути, все общение управляющей структуры, выполненной на базе
набора программ (скриптов), работающих под ОС Linux, и модулями
ESP8266 сводится к общению клиент-сервер, где серверами выступают
отдельные модули ESP8266, а клиентом демон в ОС Linux.
Все запросы, направляемые от клиента (демона) к серверу (модулю
ESP8266) и возвращаемые обратно данные используют текстовый формат
обмена данными JSON. Запись сложных структур данных в данном формате
отличается своей лаконичностью по сравнению с XML. Как в Arduino IDE
(С++), в котором идет разработка ПО для модулей, так и в PHP, на котором
36
написан демон и пользовательский интерфейс есть необходимый функционал
для работы с данным форматом.
Первоначальная настройка модуля происходит в момент загрузки. На
этом этапе происходит следующее:
1. Первоначальная загрузка, при которой подгружаются
необходимые библиотеки, определяются переменные, задаются константы.
2. Далее идет выполнение секции «setup». В рамках парадигмы
среды разработки Arduino IDE на этом этапе инициализируются
необходимые классы, производятся действия, которые необходимо
выполнить один раз при запуске системы. К таким действиям можно отнести
подключение к сети Wi-Fi, настройка режима работы Serial интерфейса для
отладки, настройка режима работы портов ввода/вывода. Так же на этом
этапе определяются обработчики web сервера. Часть кода, в которой идет
подключение к сети Wi-Fi и определение обработчиков представлено на
рисунке 21.
Рисунок 21. Часть секции «Setup». Подключение к сети Wi-Fi и
определение обработчиков web сервера.
37
В данной секции мы определили обработчики
Root – обработчик пустого запроса, в нем мы будем выводить сводную
информацию о модуле: небольшую справку о командах и структуре
данных, МАС адрес устройства, а так же считанную конфигурационную
информацию.
Init – обработчик инициализации модуля. Данный обработчик принимает
в качестве значения переменной строку в формате JSON, интерпретирует,
настраивает порты ввода/вывода и сохраняет данные о настройке портов
в энергонезависимую память.
Read – обработчик, отвечающий за считывание данных, их обработку и
отправку обратно. При вызове данного обработчика происходит опрос
всех портов контроллера в соответствии с настройками, обработка
полученной информации и отправка ее запросившей стороне.
Write – запись в порт некоторой информации, например для включения
или выключения твердотельного реле, подключенного в порту
контроллера.
EEPROM – отладочная функция, позволяющая просматривать данные,
хранящиеся в энергонезависимой памяти. Так как эта функция не
является пользовательской рассматривать его мы не будем
Info - обработчик, возвращающий информационную страницу, которая
может быть полезна при «ручной» работе с модулями.
Обработчик остальных запросов, по сути - заглушка 404.
Так же в секции «setup» идет считывание из флэш-памяти данных о
режиме работы порта (INPT / OUTPUT), о назначенных обработчиках и,
согласно этим данным, настраиваются порты ввода/вывода.
3. Далее начинается секция «loop», которая, в парадигме Arduino
IDE, по сути, является бесконечным циклом. В данной секции при каждой
итерации идет опрос состояния кнопки, с программной обработкой дребезга
38
контактов, проверка таймера «watch dog», опрос портов с привязанными
счетчиками импульсов и считывание запроса, поступившего на web сервер.
Часть кода секции представлен на рисунке 22.
Рисунок 22. Секция «loop». Часть кода
При тактовой частоте 80MHz, данный вариант компоновки ПО
обеспечивает необходимую скорость работы модуля.
В связи с необходимостью обмениваться некоторым объемом
разнообразной информации была разработана логическая структура
использующаяся при обмене данными между сервером и клиентом.
Рассмотрим некоторые примеры передаваемых данных.
Для инициализации модуля передается, в качестве значения
переменной _GET[‘init’] следующая строка:
39
{2:{m:1,t:3},4:{m:1,t:2},5:{m:1,t:5}
Разберем данную строку. Строка представлена в формате JSON. В строке
описаны вариант работы порта GPIO («m» - mode) и обработчик,
назначенный для данных, полученных с порта («t» - type). Так часть строки
"2":{"m":"1","t":"3"} сообщает контроллеру, что порт GPIO2 работает в
режиме INPUT (считывание данных) и к порту подключены датчики DS1820.
К GPIO4 подключена кнопка, к GPIO5 – датчик DHT22. Об этом говорит эта
часть - 4:{m:1,t:2}.
Список обработчиков данных может быть легко расширен, путем
дописывания функции обработки данных.
Как говорилось выше общение клиент-сервер идет по протоколу HTTP
в формате представления данных JSON. При поступлении запроса от клиента
вида: http://10.0.0.25:81/read, контроллер считывает переданный ему параметр
«read», находит соответствующий обработчик запроса, отрабатывает
необходимые алгоритмы и возвращает значения, полученные с портов
контроллера. Результат работы модуля при запросе чтения информации
представлен на рисунке 23.
Рисунок 23. Результат работы модуля ESP8266 на запрос чтения
данных на портах контроллера.
Как видно из рисунка возвращаемые данные представлены в формате
JSON и легко интерпретируются функциями языка программирования PHP.
Рисунок 24.
40
Рисунок 24. Обработанные средствами PHP данные, предоставленные
контроллером.
Здесь наглядно видна структура данных, полученных от контроллера.
Первый ключ в структуре – обработчик запроса, отработавший на стороне
модуля. Далее идет перечисление портов ввода/вывода контроллера, к
которым могут быть подключены конечные устройства (датчики, кнопки,
исполнительные устройства), со значениями на этих портах. К порту GPIO2
подключена линия связи 1-ware, на которой висят 2 датчика температуры
DS1820, соответственно мы видим адреса датчиков и значения температуры,
полученные с них.
К порту GPIO5 подключен датчик DHT22, соответственно видим
температуру и влажность, полученную с датчика.
К порту GPIO4 подключена кнопка со счетчиком срабатываний. Так
как нажатий кнопки не было – ее значение 0.
41
Особо стоит отметить процесс инициализации системы. При первом
запуске системы все порты переводятся в режим работы INPUT, то есть
чтения данных на порту. Это делается для обеспечения безопасности
установки нового модуля вместо вышедшего из строя и невозможности
включения нагрузки, подключенной к портам без предварительной проверки
конфигурации.
Для настройки модуля ESP8266 необходимо использовать HTTP запрос
вида: http://10.0.0.25:81/init?init={2:{m:1,t:1}} для указания контроллеру
необходимого режима работы конкретного порта ввода/вывода и задания
обработчика данных, привязанного к этому порту или воспользоваться
специальной страницей в пользовательской интерфейсе. После
интерпретации полученного запроса модулем в память модуля записывается
необходимая информация, и порт переводится в необходимый режим работы.
При инициализации можно указывать один, несколько или все порты
ввода/вывода сразу.
По результатам работы алгоритмов обработки запроса клиенту
возвращается JSON массив о конфигурации всех портов модуля.
Так же реализован функционал управления портами GPIO, к которым
подключены исполнительные устройства. Передаваемое на порт значение
может быть 0 – порт выключен, 1 порт включен или 2 – передача
управляющего импульса, длительностью 300мс. Последний режим
необходим для работы с бистабильными реле.
При работе счетчика импульсов с целью сохранения полученных
значений и при этом уменьшения «вытаптывания» энергонезависимой
памяти реализовано сохранение результатов при прохождении каждого 10-го
импульса. В случае подключения счетчика воды с импульсным выходом это
соответствует каждым 100 литрам воды.

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
PR как средство продвижения организации (на примере ПАО "Тамбовский завод "Комсомолец им. Н.С. Артемова")
PR-коммуникации в сфере общественного питания (на примере кафе-кондитерской «Cream Cheese»)
SMM как средство повышения эффективности работы учреждений социокультурной сферы (на примере Малого театра)
Value-based education: ценности в системе образования и способы их реализации на уроке английского языка. Опыт Европейских стран