Беспроводные сенсорные сети: эмуляция работы. Часть 4

Сергиевский М.В., Сыроежкин С.Н.

Источник: Журнал КомпьютерПресс 11'2008. http://www.compress.ru/Article.aspx?id=19782


Беспроводные сенсорные сети (БСС) состоят из микрокомпьютеров — мотов, снабженных сенсорными датчиками и приемопередающими устройствами, работающими в радиодиапазоне. Питание мота осуществляется от небольшой батареи. Моты применяются для сбора и первичной обработки сенсорных данных, которые они передают друг другу. Структура сенсорной сети формируется автоматически таким образом, чтобы в конечном счете все сенсорные данные были переданы в корпоративную сеть для дальнейшей обработки. Как уже отмечалось (см. КомпьютерПресс № 8’2008), разработка программного обеспечения для мотов осуществляется с помощью специальных средств, таких как операционная система TinyOS и язык программирования NesC. Компилируются написанные приложения посредством специальных программ — кросскомпиляторов на обычных ПК, а затем загружаются на беспроводные узлы. Для полноценного тестирования ПО, разработанного для БСС, нужна сеть, содержащая большое количество сенсорных узлов. Развертывание такой сети связано с серьезными затратами. Выходом из положения является использование специальных программ-эмуляторов. Рассмотрим эмулятор TOSSIM (TinyOS SIMulator), разработанный в рамках одного проекта c TinyOS и входящий в стандартный набор инструментальных средств разработки приложений для этой операционной системы (www.tinyos.net).

Эмулятор TOSSIM

Как и в большинстве других ОС, в TinyOS основным управляющим механизмом является событие. Событие сигнализирует о получении показаний сенсора, о поступлении пакета данных по беспроводной связи, о срабатывании таймера или о завершении вычислений. Обработка аппаратного события лежит в основе всех операций в TinyOS. Таким образом, для моделирования работы узлов БСС необходимо уметь имитировать происходящие на них аппаратные события. Таким образом, основная задача TOSSIM — эмуляция событий для БСС, моты которой работают под управлением TinyOS. TOSSIM устанавливается на обычный ПК вместе с набором инструментальных средств, необходимых для создания, компиляции, установки и отладки приложений для БСС. Работа с этими инструментами осуществляется с помощью командного интерфейса, характерного для ОС UNIX.
Приведем общие характеристики эмулятора TOSSIM:
масштабируемость — эмулятор может моделировать работу как отдельных мотов, так и огромных сетей, состоящих из нескольких тысяч узлов;
полнота — эмулятор в состоянии моделировать различные схемы взаимодействия элементов БСС, причем не только алгоритмы и сетевые протоколы, но и изменяющуюся структуру сенсорной сети;
точность — эмулятор может представлять поведение сети с необходимой точностью. Определение точного времени наступления событий важно как для анализа, так и для тестирования приложений для БСС;
достоверность — эмулятор реализует адекватный переход от моделируемой к реальной среде выполнения приложения, предоставляя разработчику возможность тестировать код, который предназначен для реального оборудования.
В состав эмулятора TOSSIM (рис. 1) входят следующие элементы: средство встраивания самого тестируемого приложения TinyOS в структуру эмулятора; очередь событий; набор программных компонентов, которые заменяют соответствующие аппаратные компоненты реальных мотов; механизмы описания моделей радиоканалов и аналого-цифровых преобразователей (ADC); средства связи, предоставляющие возможность внешним программам взаимодействовать с эмулятором.


Рисунок 1 - Архитектура эмулятора TOSSIM

Принципы работы TOSSIM

Средство встраивания приложения TinyOS в структуру эмулятора позволяет моделировать работу приложений, написанных для реальных мотов. Компилятор, входящий в состав TOSSIM, заменяет несколько низкоуровневых компонентов приложения, которые взаимодействуют с аппаратными ресурсами мота, компонентами, взаимодействующими с программными реализациями этих устройств в эмуляторе. Благодаря этому эмулятор выполняет тот же код, что и реальные сенсорные узлы. TOSSIM преобразует прерывания компьютера в события эмулятора и выстраивает их в очередь; эта очередь событий эмулятора управляет выполнением приложения TinyOS для отдельного моделируемого мота. Другими словами, сгенерированное событие эмулятора в очереди является заменителем аппаратного прерывания для моделируемого мота. Возникающее событие вызывает обработчик прерывания, который посылает сигналы событиям и вызывает команды TinyOS, имитируя то, что происходит в реальных мотах. Эти события и команды TinyOS запускают задачи и инициируют дальнейшую генерацию событий эмулятора. Для определения момента наступления события в TOSSIM используются внутренние часы, работающие с тактовой частотой 4 МГц. Каждое событие происходит строго в свое время, выполняется немедленно и связано с определенным мотом. Поскольку на всех мотах выполняется одинаковая программа, при моделировании возможна искусственная синхронизация их работы. Для предотвращения подобной ситуации эмулятор запускает программу на каждом моделируемом моте с некоторой задержкой. В TOSSIM переменные, описывающие компоненты мота (а они одни и те же для всех мотов), представляются в виде массивов. Элементом такого массива является переменная отдельного моделируемого узла, индекс которого равен индексу этого элемента в массиве. Когда ядро эмулятора обрабатывает событие, в глобальную переменную-состояние устанавливается индекс мота, работающего в текущий момент. Этот индекс используется для выборки из массивов данных тех элементов, которые относятся к активному узлу. В таблице представлен отрывок кода TinyOS, результирующий код на языке C и код для эмулятора.

Сетевая и радиомодели

TOSSIM использует очень простую, но невероятно мощную модель беспроводной сети. Сеть представляется в виде ориентированного графа, в котором каждая вершина — беспроводной узел и каждой дуге между узлами поставлено в соответствие некоторое значение — вероятность ошибки. Каждый узел имеет локальную переменную, куда заносится то, что принимается им по радиоканалу. Такая модель позволяет проводить тестирование в условиях, когда вероятность ошибки при передаче данных равна нулю, моделировать скрытые ограничения (например, для узлов a, b, c существует связь (a, b) и (b, c), но нет связи (a, c)), а также множество различных проблем, которые случаются при передаче (не найден начальный символ, нарушена целостность данных и т.п.). Эмулятор TOSSIM предоставляет разработчикам TinyOS механизмы для выбора точности и сложности радиомодели. Радиомодель основана на описанной выше сетевой модели, причем вероятность ошибки при передаче сообщения мотом u моту v необязательно равна вероятности при обратной передаче. Такой подход позволяет моделировать асимметричные связи. Вероятности ошибок могут быть заданы разработчиком и могут изменяться в процессе моделирования. В случае возникновения ошибки значение передаваемого бита инвертируется. В эмулятор заранее встроены две радиомодели. В соответствии с первой каждый мот сможет передавать сообщения любому другому по радиоканалу без ошибки. Эта простая модель полезна для тестирования радиопротоколов в условиях отсутствия многозвенной передачи данных. В соответствии со второй моделью сеть представляется неориентированным графом с нулевыми вероятностями ошибок передачи, что необходимо для тестирования радиопротоколов при многозвенной передаче.

Средства связи с внешними приложениями

Несмотря на широкие возможности эмулятора TOSSIM, может возникнуть необходимость в изменении его функциональности. Для этого в нем предусмотрены средства связи с внешними приложениями, которые позволяют управлять процессом моделирования и наблюдать за моделью, подключаясь к эмулятору через протокол TCP/IP. Для взаимодействия с внешними приложениями используются механизмы, которые лежат в основе взаимодействия компонентов в TinyOS: команды, события и интерфейсы (см. КомпьютерПресс № 8’2008). Примерами событий, посылаемых внешнему приложению, могут быть отладочные сообщения, которые разработчик добавил в код TinyOS, или содержимое пакета, полученного активным мотом по радиоканалу. При помощи вызова команд внешние приложения могут изменять структуру БСС и условия ее моделирования, например задавая необходимую радиомодель. Важно отметить, что инструкции, относящиеся непосредственно к TOSSIM, которые разработчик вносит в код приложения TinyOS, при компиляции приложения для реальных мотов удаляются.

Использование эмулятора TOSSIM

После знакомства с TOSSIM рассмотрим несколько базовых операций, которые могут выполняться при моделировании разрабатываемого приложения. Как уже было сказано, TOSSIM устанавливается на обычный ПК вместе с набором образующих среду разработки инструментальных средств, которые можно скачать с сайта www.tinyos.net. Управление инструментальными средствами производится через командный интерфейс, характерный для ОС UNIX. То есть для успешного освоения среды разработки, в частности эмулятора TOSSIM, необходимо знание ОС UNIX хотя бы на уровне пользователя. Писать приложения TinyOS можно в любом текстовом редакторе, строка в котором оканчивается одним символом LF, как принято в ОС UNIX. Компиляция написанного кода производится с помощью команды make, параметром для которой служит имя платформы (mica, mica2, iris, pc и т.п.). Для работы команды make необходимо создать файл с инструкциями makefile, что является отдельной и весьма нетривиальной задачей. Но для начала можно воспользоваться уже написанным файлом инструкций, который находится в каталоге /opt/tinyos-2.x/apps/. Итак, команда
make pc,
вызванная из каталога, содержащего исходный файл приложения и файл инструкций, создаст исполняемый файл (main.exe) для выполнения приложения в среде эмулятора. Чтобы запустить процесс моделирования, нужно воспользоваться командой:
./main [опции] <количество_мотов_в_сети>
Список опций доступен в соответствующем разделе справочной системы. Для остановки TOSSIM можно использовать комбинацию клавиш Ctrl+C. По умолчанию при моделировании на экран выводятся все сообщения эмулятора, однако, как правило, это затрудняет работу. Для фильтрации сообщений предусмотрена глобальная переменная dbg, список допустимых значений которой можно найти в справочной системе. Работу приложения можно смоделировать и с использованием графического интерфейса эмулятора TinyViz. Сначала TinyViz необходимо скомпилировать, для чего следует выполнить команду make из каталога /opt/tinyos-2.x/tools/java/net/tinyos/sim. После компиляции появится файл-скрипт tinyviz, с помощью которого и запускается моделирование с визуализацией. Например, две команды:
export dbg=usr1
и
./tinyviz -run ./main.exe 30
запустят графическое моделирование БСС, состоящей из 30 мотов, на каждом из которых выполняется приложение main.exe.