Волков И.Ю.

гр. 218

Первая часть курсовой работы.

Вторая часть курсовой работы.

 

Часть 3. Разработка программного кода для узлов сети


В данной части курсовой работы будут рассмотрены следующие пункты:

·         Определение используемой среды разработки;

·         Определение используемых библиотек;

·         Написание программного кода для Мастера и Терминалов;

·         Тестирование работы системы.

 

Стоит отметить, что на данном этапе будут реализованы не все аспекты работы системы, описанные в предыдущих частях курсовой работы.

Реализованные функции:

·         Регистрация и автоматическая перерегистрация терминалов;

·         Прием и передача сообщений основного типа (командных сообщений);

·         Запись в АСК-сообщения показаний датчиков;

·         Возможность пользователя в любой момент получить свежую информацию с датчиков и об активности терминалов.

 

Не реализованные аспекты:

·         Программирование на классовой основе;

·         Проведение радиоизмерений;

·         Динамическое изменение мощности передачи;

·   Передача программ Терминалам и возможность их выполнения,  при определенных условиях (по определенному времени, по достижению определенного порога в показаниях датчиков и пр.), без наличия подключения к Мастеру;

·         Написание специализированного пользовательского приложения управления.

 

Окончательная проработка заявленных возможностей будет произведена в ходе выполнения ВКР по аналогичной теме.

 

Среда разработки

 

В качестве среды разработки выбрана следующая совокупность приложений:

·         Редактор Notepad++ (freeware);

·         Компилятор Arduino IDE (freeware);

·         Программа для работы с COM-портом COM Port Toolkit (shareware).

 

Компилятор Arduino IDE, конечно, позволяет редактировать код программы и работать с COM-портом, однако в нем отсутствуют следующие важные возможности:

·         Полная подсветка синтаксиса;

·         Автоматическое форматирование кода;

·         Автоматическое завершение печатаемых слов;

·         Передача и прием через COM-порт в HEX-виде.

 

Определение используемых библиотек

 

Для работы с трансивером nRF24l01+ во всемирной паутине представлено большое количество различных библиотек. Для использования в разрабатываемой системе была выбрана библиотека RF24 от команды TMRh20, поскольку:

Она позволяет использовать все необходимые функции трансивера;

·         Проста в изучении;

·         Имеет подробную справочную документацию;

·         Имеет большое количество примеров по использованию.

 

Однако, если требуется более «тонкая» настройка трансивера и работа с ним или создание более серьезной сети следует обратить внимание на библиотеку RF24Network которая является переложением библиотеку RF24 на модель OSI, с добавлением некоторых новых функций и параметров.

Кроме того, данный разработчик так же предлагает специализированную библиотеку RF24Audio для передачи аудиоинформации посредствам nRF24l01+.

 

Программный код системы

 

На основе алгоритмов, описанных во второй части курсовой работы был разработан код для Arduino IDE. Полученный программный код представлен во вложениях к данной статье (папка PTX – Мастер, папка PRX – Терминал).


 

Рис. 1 – Структура программного кода

 

В целом коды для Мастера и Терминала имеют схожую структуру (рис. 1) и различаются лишь некоторыми вспомогательными функциями и процедурами.

Настройка setup() включает в себя инициализацию параметров выводов GPIO аппаратной платформы, Serial-порта (только Мастер), трансивера nRF24l01+, вывод диагностической информации пользовательскому устройству (только Мастер).

Основной цикл работы loop() программы включает в себя, для Мастера:

·         Прослушивание и считывание сообщений из радиоканала, запуск процедуры их обработки;

·         Проверка наличия и считывания сообщений из Serial-порта, запуск процедуры их обработки;

·         Проверка таймера активности терминала, запуск процедуры перерегистрации.

 

Для Терминала:

·         Первичную регистрацию Терминала у Мастера;

·         Первичную запись информации в ACK;

·         Прослушивание и считывание сообщений из радиоканала, запуск процедуры их обработки;

·         Обновление информации с датчиков.

 

Вспомогательные функции и процедуры включают в себя, для Мастера и Терминала:

·         byte getType( byte service );

·         byte getAdr( byte service );

·         byte getPwr( byte service );

·         byte makeService( byte adr, byte type, byte pwr );

·         void sendMsg( byte* input, byte inSize, byte pipeToSend, bool once );

·         void parseInMsg( byte* inRF ).

 

Для Мастера:

·         void updateActivity( byte terminal );

·         void checkActivity( byte terminal, bool force ).

 

Для Терминала:

·         void ledTest();

·         void regToMaster();

·         void answerToReq( byte numOfSource, bool full );

·         void refreshACK();

·         void refreshSrcData( byte numOfSource, bool full );

·         byte getSrcData( byte numOfSource ).

 

К каждой функции, процедуре, константе и переменной представленной выше, в приложенном к статье исходном коде приводится краткий комментарий относительно назначения, функционирования и применения.

 

Тестирование работы системы

 

Стенд для тестирования системы (рис. 2) представляет собой совокупность Мастера, с подключенным к нему ноутбуком на котором запущен COM Port Toolkit и Терминала, с подключенными к нему светодиодами и АКБ (5В).



Рис. 2 – Тестовый стенд

 

Интерфейс приложения COM Port Toolkit (рис. 3) можно разделить на две консоли:

1.      Консоль исходящих сообщений (слева);

2.      Консоль входящих сообщений (справа).

 

Рис. 3 – Интерфейс программы COM Port Toolkit

 

В таблице 1 представлены некоторые тестовые команды отправляемые Мастеру с ноутбука посредствам COM-порта.

 

Таблица 1. Тестовые команды

Команда

Переменные

Описание

22 X0 X1 X2 X3 Y0 Y1

X0..3 – соответствующие ШИМ выходы Терминала, Y0..1 - соответствующие 1/0 выходы Терминала

Команда управления подключенными к Терминалу светодиодами

0B 00 00

Отсутствуют

Вывод значений датчиков, записанных в памяти Мастера

2B X 00

X – номер датчика, для получения информации со всех датчиков X = 0xFF

Запрос показаний датчика X у Терминала

3F 01 00

Отсутствуют

Принудительный запуск процедуры перерегистрации Терминала 1

 

Первый байт во всех командах указанных в таблице 1 соответствует полю Service (рис. 4) L2-пакета сети (см. первую часть курсовой работы).

 


Рис. 4 – Пакеты L2 используемые в системе передачи

 

Где (поле Plvl на данном этапе разработки не активно):

·         Adr = 000 если запрос адресован Мастеру;

·         Adr = 001 если команда адресована Терминалу;

·         Type = 000 если команда основного (командного) типа – TYPE_MAIN;

·         Type = 111 если запрос является запросом на (пере)регистрацию – TYPE_REG;

·         Type = 010 если запрос является запросом информации с датчиков TYPE_REQ.

 

1.      После включения Мастера (рис. 5) в консоль вывелась диагностическая информация – содержимое всех настроечных регистров трансивера. Запросим у Мастера информацию с датчиков, содержащуюся у него в памяти (команда 0B 00 00), в консоли (рис. 5) видим, что данная информация отсутствует.

 


Рис. 5 – Первый этап тестирования

 

2.      Теперь включим питание Терминала. После инициализации параметров он начнет попытки регистрации у Мастера. Когда ему это удастся, в консоли Мастера (рис. 6) выведется соответствующее сообщение и поднимется флаг активности 1-го Терминала.

 


Рис. 6 – Второй этап тестирования

 

3.      Подождем некоторое время (по умолчанию, 30 секунд). Мастер запустит процедуру перерегистрации – опроса активности терминалов, которые зарегистрированы у Мастера. О начале процедуры извещает сообщение «Full activity check» выводимое Мастером в консоль (рис. 7). Так как от Терминала было получено подтверждение приема, считается, что он успешно перерегистрировался, время его последней активности обновляется, и флаг его активности не опускается (рис. 7).

 


Рис. 7 – Третий этап тестирования

 

4.      Теперь пошлем поочередно две команды:

·         22 0A 0F 0A 0F FF FF – включить все светодиоды с различной яркостью;

·         22 00 00 00 00 00 00 – отключить все светодиоды.

В консоль (рис. 8) выведется сообщение о том, что от пользовательского устройства получено командное сообщение для Терминала «TYPE_MAIN» и то, что оно было успешно передано «Successfully sanded». Подтверждение того, что светодиоды включаются, отключаются было представлено представлено в ходе консультаций и будет представлено в последующем в ходе защиты КР.

 


Рис. 8 – Четвертый этап тестирования

 

5.      Во время передачи сообщений в предыдущих пунктах, кроме всего прочему в консоль выводились сообщения следующего вида: «Received ACK message. Source: *номер источника* Data: *значение*». Это подтверждает содержание в отчетах о приеме (ACK-сообщениях) информации от датчиков. Для проверки этого, вновь запросим у Мастера информацию с датчиков, содержащуюся в его памяти (команда 0B 00 00), в консоли (рис. 9) видим, что данная информация обновилась в ходе обмена командами, без специального запроса.

 


Рис. 9 – Пятый этап тестирования

 

6.      Для внеочередного получения информации с датчиков терминала отправим через Serial Мастеру соответствующий запрос (2B 01 00), Мастер идентифицирует ее как запрос датчику 1 Терминала 1 и отправит Терминалу соответствующее сообщение. В ответ терминал отправит сообщение содержащее информацию с первого датчика, которую Мастер выведет в консоль (рис. 10) и запишет себе в память.

 


Рис. 10 – Шестой этап тестирования

 

7.      Теперь, вручную обнови информацию об активности Терминала с помощью соответствующей команды Мастеру (3F 01 00). Мастер, при принятии этого сообщения запустит процедуру перерегистрации Терминала 1. О (не)активности Терминала будет свидетельствовать (не)получение сообщения ACK (рис.11).

Отключим питание Терминала и повторим процедуру перерегистрации, как видно из консоли Мастер не получил сообщение ACK, соответственно он считает что Терминал 1 не активен, и опускает флаг его активности (рис.11).

 


Рис. 11 – Седьмой этап тестирования

 

Заключение

 

В ходе выполнения данной курсовой работы была теоретически разработана и частично реализована низкоскоростная система передачи данных, которая может использоваться для удаленного управления различными бытовыми приборами (например, светодиодным освещением).

На данный момент система готова выполнять основные, возложенные на нее функции (передача команд в направлении Мастер – Терминал и задатки обратной связи в направлении Терминал – Мастер).

В дальнейшем, в ходе выполнения ВКР, на основе уже выполненного в ходе проработки курсовой работы планируется полная реализация заявленных в первых двух частях работы функциональных возможностей системы, написание пользовательского приложения для работы с Мастером, а так же более подробное тестирование работы сети и проведение измерений зоны покрытия Мастера.

 

Список литературы:

1.      Arduino IDE. Language Reference;

2.      TMRh20 RF24 class.

 

Ссылки на используемое ПО:

1.      Arduino IDE;

2.      Notepad++;

3.      COM Port Toolkit.


P.S. Если требуется, могу заснять и приложить к статье видео отчет о тестировании системы