SlideShare a Scribd company logo
1 of 91
Download to read offline
Санкт-петербургский государственный политехнический университет
Институт информационных технологий и управления
Кафедра компьютерных систем и программных технологий
Работа допущена к защите
Зав. кафедрой профессор
__________ В. Ф. Мелехин
«___» ____________ 2013 г.
ВЫПУСКНАЯ РАБОТА БАКАЛАВРА
Тема: Разработка и исследование распределенных встраиваемых систем
сбора данных с применением средств глобального позиционировании
Направление: 220200 – Автоматизация и управление
Выполнил, студент гр. 4081/11 _________ Чжан Цзини
Руководитель,к.т.н.,доц. _________А.Е.Васильев
Санкт-Петербург
2013
РЕФЕРАТ
стр.90, рис.31, табл.1
РАСПРЕДЕЛЕННЫЕ СИСТЕМЫ СБОРА ДАННЫХ,
МИКРОКОНТРОЛЛЕР, ВСТРАИВАЕМАЯ СИСТЕМА УПРАВЛЕНИЯ,
МОДУЛЬ GPS, МОДУЛЬ GSM, ИНТЕРНЕТ ВЕЩЕЙ
В работе выполнена разработка распределенной программно-
аппаратной системы беспроводного сбора данных, использующей GPS для
локализации местоположения и GSM для передачи данных.
Целью работы является создние эффективных (в разработке и
эксплуатации) средств постороения распределённых беспроводных систем
сбора данных.
Решаемые задачи: изучение существующих решений, выбор
аппаратных средств, разработка программного обеспечения, проведение
испытаний.
2
СОДЕРЖАНИЕ
1.ОБЗОР ТЕХНОЛОГИЙ И СРЕДСТВ РАСПРЕДЕЛЕННОГО СБОРА
ДАННЫХ...................................................................................................................5
1.1.Общие положения..........................................................................................5
1.2.Примеры систем распределенного сбора данных.......................................5
1.2.1.Модуль RuggedRouter®...........................................................................5
1.3.Постановка задачи..........................................................................................7
2.РАЗРАБОТКА СТРУКТУРЫ И АППАРАТНОГО ОБЕСПЕЧЕНИЯ
СИСТЕМЫ.................................................................................................................8
2.1.Плата TX-1C....................................................................................................8
2.2.Модуль GPS.....................................................................................................9
2.3.Модуль GSM.................................................................................................10
2.4.Общая схема системы..................................................................................10
3.РАЗРАБОТКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ........................................11
3.1.Программная реализация дополнительного последовательного порта. .11
3.2.Первичная настройка модуля GSM и AT команд.......................................13
3.3.Анализ информации о местоположении GPS............................................14
3.4.Сбор данных при помощи датчика.............................................................15
3.5.Общая структура программы MarDDAS....................................................17
4.ИССЛЕДОВАНИЯ РАЗРАБОТАННОЙ РАБОТЫ.............................................18
4.1.Тестирование программного последовательного порта...........................18
4.2.Тестирование модуля GSM..........................................................................18
4.3.Тестирование датчика температуры DS18B20..........................................18
4.4.Тестирование модуля GPS...........................................................................19
4.5.Комплексные испытания системы..............................................................19
4.6.Анализ точности...........................................................................................21
ЗАКЛЮЧЕНИЕ........................................................................................................21
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ...............................................22
3
ПРИЛОЖЕНИЕ 1. Понятие АТ команды..............................................................22
ПРИЛОЖЕНИЕ 2. Структура проекта..................................................................24
ПРИЛОЖЕНИЕ 3. Программный код разработанной системы..........................26
ПРИЛОЖЕНИЕ 3. Программный код разработанной системы..........................29
ПРИЛОЖЕНИЕ 3. Программный код разработанной системы..........................35
ПРИЛОЖЕНИЕ 3. Программный код разработанной системы..........................39
ПРИЛОЖЕНИЕ 3. Программный код разработанной системы..........................50
ПРИЛОЖЕНИЕ 3. Программный код разработанной системы..........................62
ПРИЛОЖЕНИЕ 3. Программный код разработанной системы..........................67
ПРИЛОЖЕНИЕ 3. Программный код разработанной системы..........................71
ПРИЛОЖЕНИЕ 3. Программный код разработанной системы..........................80
4
ВВЕДЕНИЕ
Человечество вступает в новую эру глобальных вычислений и
коммуникаций. Огромный поток информации проходит через мобильную
телефонную сеть, а разнообразные устройства стали неотъемлемой частью
повседневной жизни миллионов людей.
Развитие коммуникаций перевело это явление на новый этап, от
приемопередатчиков малого радиуса действия к устройствам с
приемопередатчиками на длинные дистанции. Родилась новая форма
взаимодействия между людьми и устройствами, а также напрямую между
устройствами. В прошлом, обмен информацией мог происходить лишь между
людьми, теперь он происходит между любыми устройствами в любой точке
мира в любое время.
Интенсивность взаимодействия между устройствами будет увеличиваться
и создавать совершенно новую сущность – “Интернет Вещей”. Он построен на
отличительных особенностях сетей будущего, таких как возможность
подключать устройства и предметы первой необходимости к большим базам
данных и сетям, способность обнаружения изменения физического состояния
объектов, способность использовать преимущества миниатюризации.
5
Встроенный интеллект объектов сможет повысить производительность
сетей путем выполнения локальной обработки информации.
С помощью объединения в сети обработки информации, промышленные и
бытовые системы будут увеличивать интеллектуальность и
производительность, обнаруживать через датчики изменения в физической
среде. Таким образом, даже малоразмерные частицы могут быть включены в
сеть. Такое развитие может превратить сегодняшние статические объекты в
динамические.
Сенсорные сети могут обнаружить минимальные изменения окружающей
среды и предотвратить катастрофу.
Исследования показывают, что Интернет вещей будет широко
использоваться на местном рынке и в международной торговле.
Исследованию некоторых аспектов глобальных коммуникаций между
устройствами и посвящается данная работа.
Цель работы - создние эффективных (в разработке и эксплуатации) средств
постороения распределённых беспроводных систем сбора данных.
6
1. ОБЗОР ТЕХНОЛОГИЙ И СРЕДСТВ РАСПРЕДЕЛЕННОГО СБОРА
ДАННЫХ
1.1. Общие положения
Автоматизированные системы сбора данных в настоящее время являются
общедоступным средством получения экспериментальной информации, и
связано это, в первую очередь, с широким распространением персональных
компьютеров. Системы сбора данных применяются в научных исследованиях,
управлении производственными процессами, мониторинге в
промышленности, медицине, метеорологии, космонавтике и других областях
человеческой деятельности. Автоматизированный сбор данных предлагает
данные нового качества, которые невозможно получить иными средствами –
это результаты статистической обработки огромного числа измерений,
полученных в цифровой форме; возможность регистрации случайно
появляющихся событий с недостижимой ранее разрешающей способностью
по времени и амплитуде; регистрация быстрых процессов. Благодаря резкому
удешевлению систем сбора данных по сравнению со стоимостью
человеческого труда они нашли применение там, где ранее использовалась
ручная регистрация данных: в теплицах, элеваторах, на метеостанциях, в
процессе приемосдаточных и сертификационных испытаний продукции, на
складах, в промышленных холодильниках, в котельных, при автоматизации
научного эксперимента и т.п1
.
1
7
Система сбора данных может быть распределенной, когда устройства ввода
разнесены территориально по объекту сбора данных, а полученные данные
сходятся к единому накопителю и обработчику данных с помощью сетевых
технологий (сети Ethernet, Modbus, Profibus, DCON и др., беспроводные сети
Bluetooth, Wi-Fi, GSM, ZigBee). Распределенные системы сбора данных
допускают практически неограниченное наращивание числа каналов ввода,
однако имеют ограничения на скорость передачи данных по сети.
1.2. Примеры систем распределенного сбора данных
1.2.1. Модуль RuggedRouter®
Семейство устройств RuggedRouter® представляют собой устройства,
интегрирующие брандмауэр, маршрутизатор и VPN сервер, обеспечивающие
сетевую безопасность. RuggedRouter® могут применяться для создания
безопасного периметра у критически важных участков систем во избежание
вмешательства в работу сети вследствие специальных или случайных
воздействий. Устройства идеально подходят для электроподстанций,
промышленности и систем контроля дорожного трафика. Модули
подключения беспроводного сотового модема для устройств RuggedRouter® -
RuggedCell™, позволяют пользователям расширять границы сетей, достигая
удалённых узлов широкополосными каналами с встроенными функциями
балансировки сетевой нагрузки. Маршрутизатор может быть оснащён как
GSM SIM решением, так и CDMA. Устройство приведено на следующем
рисунке (Рисунок 1.1).2
Виктор Денисенко, Рафгат Кильметов. Распределенные системы сбора
данных RealLab/ЭЛЕМЕНТНАЯ БАЗА: система сбора данных
2
8
Рисунок 1. 1. Пример использовании RuggedRouter
1.2.2. Модуль ML-Module-Z
ML-Module-Z(на рисунке 1.2) основаны на российской платформе
MeshLogic для разработки беспроводных сенсорных сетей (на рисунке 1.3),
имеющей множество преимуществ относительно других стандартных и
проприетарных технологий, в частности, такие свойства, как:
http://ruggedcom.ru
9
 полностью многоячейковая топология сети;
 самоорганизация и автоматический поиск маршрутов;
 устойчивость к соканальной интерференции;
 высокая масштабируемость и надежность доставки данных;
 все узлы равноправны и являются маршрутизаторами;
 возможна работа всех узлов от автономных источников питания
Рисунок 1. 2. Беспроводной модуль ML-Module-Z
Рисунок 1. 3. Беспроводная система сбора информации
1.2.3. Модуль ML-SM-SB
10
Беспроводная система мониторинга ML-SM-SB (на рисунке 1.4)
представляет собой аппаратно-программный комплекс для организации
беспроводной сети с целью автоматического сбора данных от распределенных
в пространстве датчиков.
В типовом варианте система ML-SM состоит из множества беспроводных
узлов ML-SM-N, к каждому из которых подключены внешние датчики через
соответствующие модули сопряжения ML-SM-Sx, одного беспроводного
шлюза ML-SM-G и сервера на базе персонального компьютера с прикладным
программным обеспечением.
Основные функции
 организация беспроводной распределенной сети с произвольной
топологией;
 автоматический сбор по радиоканалу показаний датчиков;
 накопление собранной информации в энергонезависимой памяти
(архиве);
 чтение информации из архива по запросу от сервера для ее
отображения, обработки и анализа.
Рисунок 1. 4. Внешний вид модуля ML-SM-SB
11
1.3. Постановка задачи
У существующих систем имеется ряд недостатков, а именно:
 высокая стоимость системы;
 сложность написания программного обеспечения;
 высокие энергозатраты.
Необходимо реализовать новую систему сбора данных, обладающую
следующими характеристиками:
 низкая стоимость;
 мобильность;
 возможность получения географических данных;
 возможность интеграции с существующими сетями общего
назначения.
12
2. РАЗРАБОТКА СТРУКТУРЫ И АППАРАТНОГО ОБЕСПЕЧЕНИЯ
СИСТЕМЫ
2.1. Плата TX-1C
Для разработки данного проекта была выбрана макетная плата TX-1C,
основанная на микроконтроллере STC89C52RC, имеющая в своем составе
жидкокристаллический дисплей, клавиатуру, датчик температуры, ЦАП, АЦП
и др.
Ниже приведены причины, выбора платы TX-1C:
1) TX-1C была разработана на основе STC89C52RC. По сравнению с
микроконтроллерами других компаний, микроконтроллеры от
компании STC обладает большими набором ресурсов (1280 байт
SRAM, 8-64Кбайт ПЗУ, 2-8 Кбайт ISP кода, встроенный 8-канальный
8-битовый АЦП, внутрикристальный EEPROM, сторожевой таймер,
два указателя данных и т.д.). Кроме того, STC микроконтроллеры
обладают низкой стоимостью, высокой скоростью и надежностью;
2) TX-1C поддерживает два способа загрузки программ (через USB и
через последовательный порт);
3) питание от порта USB;
4) На плате размещены ADC0804, DAC0832, PDIUSBD12, датчик
температуры - DS18B20;
5) TX-1602 поддерживает 1602 и 12864 интерфейсы;
6) большое количество технической документации.
Внешний вид, структурная и принципиальная схемы представлены на
рисунках 2.1, 2.2 и 2.3 соответственно.
13
Рисунок 2. 1. Внешний вид TX-1C
Рисунок 2.2. Структурная схема TX-1C
14
Рисунок 2.3. Принципиальная схема TX-1C
15
2.2. Модуль GPS
В качестве GPS модуля был выбран TX-GPS модуль, который объединяет
чип NEO-5Q Швейцарской компании U-Blox и резервный аккумулятор
напряжением 3В для сохранения информации о текущем местоположении в
условиях отсутствия питания. Также модуль TX-GPS поддерживает UART,
USB, IIC, SPI.
Причина выбора этого модуля в том, что он использует новейшую
технологию KickStart компании U-Blox, которая обеспечивает самый быстрый
сбор даже очень слабых спутниковых сигналов GPS. Более того, он
поддерживает выходные контакты уровня TTL (TxD, RxD, Gnd и Vcc) которые
могут быть подключены напрямую к программному последовательному порту
микроконтроллера. Внешний вид и принципиальная схема представлены на
рисунках 2.4 и 2.5.
Рисунок 2.4. Внешний вид модуля GPS
16
Рисунок 2.5. Принципиальная схема модуля GPS
2.3. Модуль GSM
Модуль GSM основан на процессоре TC35i компании Siemens, который
работает с сетями GSM 900 МГц и GSM 1800 МГц и имеет хорошие массо-
габаритные показатели. Он специально разработан для задач телеметрии,
телематики и телефонии, таких как: измерение, управление автопарком,
охранные системы, POS-терминалы или торговые автоматы.
Скорость передачи его последовательного порта регулируется и может
быть установлена в пределах от 300b/s до 115kb/s.
Внешний вид и принципиальная схема представлены на рисунках 2.6 и 2.7.
17
Рисунок 2.6. Внешний вид модуля GSM
Рисунок 2.7. Принципиальная схема модули GSM
18
2.4. Общая схема системы
TX-1C макетная плата на базе микроконтроллера STC89C52RC
поддерживает только один последовательный порт. Для того, чтобы получать
информацию от модуля GPS и передавать обработанные данные через GSM
сеть, необходимо наличие двух последовательных портов (второй создаётся
программно).
Рассмотрим два варианта реализации: первый это подключить GSM модуль
к программному последовательному порту, а GPS модуль к оригинальному
последовательному порту. Такой вариант требует программного
последовательного порта, способного и передавать, и принимать данные.
Второй вариант состоит в соединении GSM модуля с оригинальным
последовательным портом, а GPS модуля – с программным, что требует
программной поддедржки последовательного порта, способного только
принимать данные.
Система MarDDAS использует второй вариант, поскольку это облегчает
написание программы.
Внешний вид и структурная схема представлены на рисунке 2.8 и 2.9.
Рисунок 2.8. Внешний вид MarDDAS
19
Рисунок 2.9. Структурная схема MarDDAS
Микроконтроллер получает данные о местоположении и местного времени
системы посредством спутниковой системы навигации GPS. Затем на
микроконтроллер поступает информация о температуре данной местности с
помощью датчика температуры. Полученные данные отправляются на
указанный в программе телефонный номер с использованием GSM-сети
SMS-сообщением.
20
3. РАЗРАБОТКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
3.1. Программная реализация дополнительного последовательного
порта
При использовании микроконтроллеров часто встречается ситуация, когда
последовательный порт необходим как для сбора данных, так и для их
отправки нескольким абонентам, что приводит к необходимости
использования микроконтроллера с несколькими последовательными портами.
В выбранном микроконтроллере он только один. Таким образом, второй
последовательный порт должен быть реализован программно.
Скорость передачи используемого чипа NEO-5Q 9600 бит/cек, он
поддерживает последовательную передачу с 1 стартовым битом, 8 битами
данных и 1 стоповым битом. Таким образом, длительность каждого бита
составляет
1000ms
9600
=0.104ms .
Для обнаружения стартового бита использован канал P3.2 (INT 0). Когда
приходит стартовый бит, будет вызвано внешнее прерывание, что позволит
внешней функции получить остальные биты.
Схема получения одного байта программным последовательным портом
показана ниже (Рисунок 3.1):
21
Задержка 0.104ms
Int 0
Определение входной переменной для получения одного байта и присваивание переменной значения 0
Инициализация и запуск Timer0, задержка 0.104ms
Сдивиг входной переменной на 1 бит вправо, получение данных
Уже получено 8 бит ?
Получить стоп-бит
N
Y
Завершить работу T0, Конец
22
Рисунок 3.1. Схема программы получения данных последовательным портом
3.2. Первичная настройка модуля GSM и AT команд
Модули GSM обычно управляются с помощью AT команд. Список
использованных AT-команд приведен в Приложении 1.
Основная идея использования микроконтроллера для управления GSM
модулем заключается в отправке серии AT команд от микроконтроллера на
GSM модуль через последовательный порт на требуемой скорости передачи
(скорость передачи данных между GSM модулем и микроконтроллером 9600
бит/c). Так как обычно на выполнение одной AT команды требуется больше
времени, то, когда мы используем микроконтроллер для управления модулем
GSM, необходимы задержки между каждой AT командой.
Серия AT команд для управления GSM для отправки SMS отражается
следующим образом:
1) сначала программа должна установить номер центра текстовых
сообщений с помощью команды AT + CSCA=+ 79168999100 <CR>. В
работе использовалась SIM-карта российской мобильной сети МТС,
поэтому номер центра текстовых сообщений +79168999100. При
использовании SIM-карты других компаний номер центра текстовых
сообщений будет иным;
2) в системе, далее задаётся текстовый режим отправки SMS-
сообщений. Должна быть отправлена команда: AT+CMGF=1 <CR>
Установка параметров SMS в текстовом режиме:
AT+CSMP=<fo>,<vp>,<pid>,<dcs> <CR>.
3) указывается набор символов терминального оборудования +CSCS.
Используется априори система GSM:
AT+CSCS=GSM;
4) далее производится отсылка сообщений: +CMGS
23
Send_SMS
Устаность адресс сервис центра для отправки SMS
Установить текстовый режим SMS
Выбор набора символов терминального оборудования
Отсылка сообщений
Конец
Схема описанных выше шагов показана на рисунке 3.2.
24
Рисунок 3.2. Этапы отправки SMS
3.3. Анализ информации о местоположении GPS
Для анализа информации о местоположении из полученных данных от GPS
модуля, необходимо выделить последовательность байт с искомой
информацией. Так как обмен информацией между модулем GPS и
микроконтроллера происходит через программный последовательный порт
(INT0 P3.2), то основное назначение программы обслуживания прерывания
INT0 состоит в извлечении полезных байтов.
Выходные данные модуля GPS нормируются в NMEA-01183 формате
данных, который всегда начинается с байта "$" например, $GPRMC, $GPGGA,
$GPGSV, $GPVTG, $GPGLL и так далее. Для получения информации о
местоположении и времени, следует проанализировать $ GPRMC сообщения.
Процесс приема $GPRMC сообщения состоит из двух частей: первая часть
состоит в получении символа "$". Поскольку GPS сообщение всегда
начинается с "$", и заканчивается "0ah", необходимо убедиться в том, что
сообщение получено целиком. В программе обслуживания прерывания INT0,
первое, что необходимо сделать, это проверить полученный байт. Если это "$",
то мы устанавливаем битовый флаг и сообщаем микроконтроллеру, что
процесс приема начался. Для следующих входящих байтов, микроконтроллер
будет проверять, является ли он «0ah» (конец сообщения GPS). Если это так,
то микроконтроллер остановит прерывания INT0 и приступит к анализу
полученного сообщения. В этот момент мы подходим ко второй части приема
$GPRMC сообщения. Если это $GPRMC сообщение, то пятый байт будет "C".
Как только микроконтроллер будет уверен, что это $GPRMC сообщение, он
приступит к анализу данных о местоположении и времени из этого сообщения,
в противном случае микроконтроллер очистит буфер, изменит указатель на
буфер и начнет новый процесс приема.
25
gps_rmc_parse
Получение информацию о времени и местоположении
Является ли данное сообщение типа $GPRMC
Конец
Отобразить полученные данные на ЖКИ
N
Y
Рассмотрим структуру $GPRMC сообщения, а затем выясним, как
анализировать данные положения и времени из него. Ниже приведен формат
сообщения:
$GPRMC,hhmmss,status,latitude,N,longitude,E,
spd,cog,ddmmyy,mv,mvE,mode*cs<CR><LF>
Далее приведены 6 частей $GPRMC сообщения, необходимые для получения
местоположения и времени:
1) Hhmmss - время UTC;
2) status: V - предупреждение навигационного приемника, status: A
-данные действительны;
3) Latitude - долгота, градусы+минуты;
4) N - индикатор север/юг N=север или S=юг;
5) Longitude - широта, градусы+минуты;
6) E - индикатор положения - запад/восток, E=восток или W=запад.
В соответствии со стандартом NMEA, широта и долгота выводятся в
формате градусы, минуты и (десятичные) доли минут. Иногда составляющие
должны быть преобразованы. Другими словами, если приемник GPS сообщает
4717.112671 северной широты и 00833.914843 восточной долготы, это:
 широта 47° 17’, 6.76026’’;
 долгота 8°, 33’, 54.89058’’.
В $GPRMC сообщении, каждая область делится символом ",", например, если
мы хотим получить ччммсс, мы должны получить часть между первой "," и
второй ",". Для достижения этой цели, была написана ассемблерная функция
get_comma_string.
Схема алгоритма обнаружения и анализа $GPRMC сообщения показана на
рисунке 3.3.
26
3.4. Сбор данных при помощи датчика
В распределенной системе сбора данных существуют две основных
функции: обмен информацией и сбор данных (с помощью датчика сетей).
В разрабатываемом проекте используется один датчик температуры
DS18B20, который интегрирован на макетной плате TX-1C. В отличие от
других датчиков температуры, DS18B20 поддерживает 1-Wire протокол, это
означает, что DS18B20 требуется всего одну линию для двунаправленной связи
с микроконтроллером.
27
Рисунок 3.3. Схема программы обнаружения и анализа
NMEA-сообщения
Можно выявить три основных шага для получения информации о
температуре от датчика:
1) инициализация:
Все операции на шине 1-Wire начинаются с импульса сброса, который
передается по ведущей шине, с последующей передачей импульса по
ведомой шине;
2) запись данных в DS18B20
Поскольку в системе MarDDAS микроконтроллер соединяется с одним
DS18B20, то микроконтроллеру не нужно посылать команды через
вывод данных DS18B20 для чтения и сопоставления специального кода
ROM;
3) чтение данных из DS18B20
Наиболее важной частью управления датчиком является считывание
обработанных данных с одного или нескольких датчиков.
Схема чтения показателей датчика DS18B20 показана на рисунке 3.4.
28
anal_temper
Инициализация
Запись даныых в датчик
Чтение температуры с датчика
end
Рисунок 3.4. Получение температурных данных с датчика
3.5. Общая структура программы MarDDAS
На рисунке 3.5 показана схема работы программы, реализуемом в данной
работе. В начале программы просходит инициализация для всех используемых
составляющих проекта. Затем ожидается получение действительной
информации со спутника через программный последовательный порт. Если
информация является действительной, то будет происходить анализ
полученного сообщения. После анализа сообщения будет получать
информацию о местоположении системы и времени. Затем будет происходить
анализ температуры в заданной местности. Если система получит команду для
отправки сообщения, данные будут отправлены в виду SMS-сообщения:
местоположение и температура.
29
30
Рисунок 3.5. Общий вид программы MarDDAS
4. ИССЛЕДОВАНИЯ РАЗРАБОТАННОЙ РАБОТЫ
4.1. Тестирование программного последовательного порта
Перед подключением выводных контактов TTL GPS модуля к
микроконтроллеру P3.2 (INT 0) мы должны проверить, работает ли наша
программа обслуживания прерывания. Для этого необходимо установить
соединение между ПК и микроконтроллером.
Для осуществления подключения используется TX конвектор (RS232
TTL, USB  RS232, USB  TTL), его внешний вид приведен ниже
на рисунке 4.1.
Рисунок 4.6. Внешний вид модуля TX-convert
Схема подключения показана ниже на рисунке 4.2.
Рисунок 4.7.Схема подключения
Скриншот показано на рисунке 4.3.
31
Рисунок 4.3.Схема программы серийного помощника
4.2. Тестирование модуля GSM
Поскольку GSM модуль соединяется с микроконтроллером
непосредственно через последовательный порт, то легко проверить его
работоспособность. Необходимо подключить GSM модуль к ПК через
последовательный порт (с помощью TX конвектор), а затем отправить на него
AT команды. В этом случае, GSM модуль производит отправку SMS ("hello
world") на указанный номер мобильного телефона. Результат тестирования
показан ниже:
Рисунок 4.4. Сообщение из GSM модуля
32
4.3. Тестирование датчика температуры DS18B20
Для тестирования датчика температуры DS18B20, было проведено два рода
экспериментов:
1) исследование показаний в комнатной температуре (Рисунок 4.5);
2) исследование показаний в условиях контакта c горячей чашкой
(Рисунок 4.6).
Результаты экспериментов представлены ниже.
Рисунок 4.5. Исследование показаний в комнатной температуре
Рисунок 4.6. Исследование показаний в условиях контакта c горячей чашкой
33
4.4. Тестирование модуля GPS
Тестирование модуля GPS было проведено в программе u-center 5.08.
В ходе тестирования GPS модуля, производилось некоторое движение на
достаточно большое расстояние. Полученные данные были экспортированы в
ПО Google Earth (рисунок 4.7).
Рисунок 4.7. Динамическое движение
Полученные данные с высокой точностью описывают проделанный путь.
34
4.5. Комплексные испытания системы
Система была запущенна на выполнение, полученные результаты подробно
отображаются на ЖК-дисплее TX-1C. (см. рис. 4.8-4.12)
Рисунок 4.8. Процесс инициализации
35
Рисунок 4.9. Данные времени в формате UTC
Рисунок 4.8. Данные местоположения
36
Рисунок 4.9. Температурная информация
Рисунок 4.10. SMS сообщение
37
4.6. Анализ точности
GPS является спутниковой навигационной системой. В точках рядом с
землей спутниковые сигналы отражаются от высотных зданий и других высот
(многолучевой эффект). Таким образом, GPS-устройство в автомобиле не
может производить точное позиционирование из-за больших задержек,
которые вызывают непрямые пути распространения спутниковых сигналов
(радиоволн). Другие факторы, влияющие на точность определения
местоположения, включают в себя: спутниковую геометрию, сдвиги
спутниковых орбит, ошибки спутниковых часов, различные явления в
тропосфере и ионосфере и ошибки в расчетах.
Карта отклонений очень близка к реальной ситуации, которая показана в
разделе 4.4.2(рисунок 4.7). Минимальное отклонение от реального положения
составляет для широты – 0.000045, для долготы – 0.000062.
Рисунок 4.13. Карта отклонений динамического позиционирования
38
ЗАКЛЮЧЕНИЕ
Система MarDDAS (собственная разработка – Martin’s Distributed Data
Acquisition System) предоставляет возможность точно определить
местоположение транспортного средства а так же получить основные
характеристики. MarDDAS относится к категории систем мониторинга
траектории, эти системы реализованы с использованием нескольких
гибридных технологий, которые включают в себя: беспроводную связь,
географическую локализацию и встроенные устройства наблюдения.
Транспортные системы слежения предназначены для оказания помощи
корпорациям с большим количеством автомобилей. Данные системы
позволяют минимизировать затраты и сложность работы обслуживающего
персонала. Кроме того, системы имеют и маршрутное назначение - можно
рассчитать маршрут на основе текущего местоположения автомобиля. Таким
образом, использование транспортных систем слежения имеет важное
значение для крупных предприятий для удовлетворения различных
требований клиентов и повышения производительности.
MarDDAS является средством, подобным транспортной системе
слежения. По сравнению со штатными транспортными системами слежения,
MarDDAS имеет свои преимущества. Благодаря добавлению сети датчиков в
систему, MarDDAS позволяет осуществлять не только поиск текущего
местоположения объекта, но и сбор информации об окружающей среде
текущего местоположения. Это существенно расширяет область применения
системы.
Приведем примеры применения разработанной системы:
 На основании концепции системы распределенного сбора данных и
«Интернете вещей», предположим, что есть центральный компьютер в
39
городе Санкт-Петербурге, основной целью которого является анализ
входящей экологической информации в различных точках города.
Информационный центр посылает 10 автомобилей, каждый из которых
оснащен MarDDAS системой. Эти 10 автомобилей постоянно получают
экологическую информацию (в настоящее время в MarDDAS
интегрирован только датчик температуры, так что экологической
информацией является температура, при необходимости, в перспективе
будут добавлены иные датчики) каждые 100 метров. После того, как
память МК заполнена полученной информацией, MarDDAS пошлет
всю информацию (местоположение, время и температуру) на
центральный компьютер для обработки. При условии наличия
достаточного количества автомобилей и достаточной вычислительной
мощности центрального компьютера, возможно контролировать
экологическую ситуацию целого города, даже всей страны. В этом
случае, вследствие первичной стоимости, использование GSM-сети
(или GPRS) для обмена данными, вероятно, не является приемлемым.
 Россия богата нефтью и природным газом. Транспортировка этих
природных ресурсов из одного места в другое происходит по
трубопроводам. Поскольку транспортировка трубопроводами очень
долгая и иногда проходит через небезопасные экологические зоны, а
также в силу отсутствия надлежащих ремонтных работ, трубопроводы
зачастую подвержены повреждениям. Такие поломки очень трудно
обнаружить. С помощью MarDDAS, можно просто добавить несколько
датчиков для обнаружения утечек нефти или газа. MarDDAS будет
записывать все позиции, где трубопровод поврежден. По завершению
сбора информации система будет отправлять собранные данные в центр
управления через GSM сеть.
 Так же, как и в предыдущем примере, обслуживание железных дорог
является большой проблемой. Поскольку они такие же протяженные,
как и газовые/нефтяные трубопроводы. Обычный способ обнаружения
40
повреждений полотна недостаточно эффективен. С помощью датчиков
системы MarDDAS можно получить необходимые данные. Все
позиции, где нарушено расстояние между рельсами, будут записаны в
MarDDAS и отправлены в центр управления через GSM сеть.
Экспериментальные результаты показывают, что разработанная система
работает стабильно и надежно. Реализованная технология может быть
применена в различных областях, например, в экологическом мониторинге.
Однако, проблемы сетей передачи данных имеют определенное влияние на
характер реализации работы системы в реальном времени. Например, не
исключены задержки получения или отправки SMS-сообщений, в особенности
при высокой загруженности мобильной сети или в районе с низким качеством
приема сигнала. Для достижения более надежной связи, возможно создание
специального канала для передачи SMS с поставщиком GSM.
41
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
Васильев А.Е. Микроконтроллеры: разработка встраиваемых приложений.–
СПб.: БХВ-Петербург, 2008.– 304 с
张义和,陈敌北. 例说 8051(第三版), 2009. – 336с
SIEMENS. TC35i Siemens Cellular Engine: AT Command Set, 2003. – 257 с
u-blox 5 Receiver Description including Protocol Specification Public Release,
2009. – 257 с
42
ПРИЛОЖЕНИЕ 1. Понятие АТ команды
АТ команды являются набором командного языка или инструкций,
которые направляются в сотовый модуль для выполнения различных действий.
Эти команды или инструкции могут быть отправлены через USB,
последовательный или другой интерфейс к сотовому модулю от основного
приложения контроллера.
Установка параметров SMS в текстовом режиме:
AT+CSMP=<fo>,<vp>,<pid>,<dcs> <CR>.
Таблица 0.1.Состав байта <fo>
b7 b6 b5 b4 b3 b2 b1 b0
H
P
HDH
I
SR
R
VPF R
D
VPF
 HP: не используется в текстовом режиме;
 UDHI: заголовок для пользовательских данных, b6=1 если
начало поля UserData (пользовательские данные) содержит
заголовок в дополнение к сообщению. Данная опция не
поддерживается командой +CSMP, но может быть
использована в режиме PDU (+CMGS);
 SRR: запрос на получение отчета о статусе, b5=1 если отчет о
статусе запрашивается.
 VPF: формат сроки действия;
b4=0 и b3=0 → поле <vp> отсутствует;
b4=1 и b3=0 → поле <vp> присутствует в соответствующем
формате;
43
другие форматы (абсолютный и расширенный) не
поддерживаются;
 RD: отклонять копии сообщений (b2=1);
 <mr> и <da>, также как и предыдущее сообщение от того же
<oa>;
 MTI: индикатор типа сообщения;
b1=0 и b0=0 → SMS-DELIVER (от SC к MS);
b1=0 и b0=1 → SMS-SUBMIT (от MS к SC);
 в текстовом режиме <vp> кодируется только в
«относительный» формат;
 значение по умолчанию равно 167 (24 часа). Это значит, что
один байт может описывать разные значения;
 <pid> – используется для определения используемого
протокола высшего уровня либо отражает взаимодействие с
определенным типом устройств связи. Например, 0x22 для
группы 3 телефакса, 0х24 для голосовых вызовов, 0х25 для
ERMES (European Radio Messaging System);
 <dcs> – используется для определения способа кодировки
информации. Сжатый текст не поддерживается.
Поддерживаются только алфавит GSM установленный по
умолчанию , формат 8-битных данных и алфавит UCS2;
 назначить период действия для SMS-сообщений (один день)
AT+CSMP=17, 167, 0, 0.
Указывается набор символов терминального оборудования +CSCS.
Данная команда сообщает мобильному оборудованию, какой набор
символов используется терминальным оборудованием. Мобильное
оборудование может преобразовывать каждый символ введенных или
44
отображаемых строк. Эта функция используется для отправки, чтения или
написания коротких сообщений.
Синтаксис команды:
AT+CSCS=<набор символов>
<набор символов>
GSM – алфавит GSM по умолчанию.
PCCP437 – кодовый набора символов PC страница 437.
CUSTOM – пользовательский набор символов.
HEX – шестнадцатеричный режим. Набор символов не используется;
пользователь может считывать или записывать шестнадцатеричные
значения.
Отсылка сообщений: +CMGS
Поле <address> – номер, на который посылается сообщение. Для
отправки сообщения используется комбинация символов <ctrl-Z> (кодировка
ASCII 26). Текст может содержать любые символы, кроме <ctrl-Z> и <ESC>
(ASCII 27). Символ <ESC> отменяет отправку сообщения.
ПРИЛОЖЕНИЕ 2. Структура проекта
45
46
ПРИЛОЖЕНИЕ 3. Программный код разработанной системы
Листинг 1. main.asm
extrn code(int0_inter)
extrn code(project_init)
extrn code(gps_rmc_parse)
extrn code(key_check)
extrn code(send_sms)
extrn code(waiting_commands)
key_vail bit 20h.0
rev_stop bit 20h.4 ;1
tmp equ 48h
org 0000h
sjmp main
org 0003h
lcall int0_inter
reti
main:
lcall project_init
xxx:
jnb rev_stop,$
clr rev_stop
clr ex0
lcall key_check
lcall gps_rmc_parse
lcall key_check
jnb key_vail,xxx1
clr key_vail
lcall send_sms
47
xxx1:
setb ex0
sjmp xxx
DEL1S:MOV R7,#10
D1: MOV R6,#200
D2: MOV R5,#250
DJNZ R5,$
DJNZ R6,D2
DJNZ R7,D1
RET
end
ПРИЛОЖЕНИЕ 3. Программный код разработанной системы
Листинг 2. serial_operation.asm
public uart_init
48
public int0_inter
public serial_send
ss2 segment code
rseg ss2
rev_counter equ 43h
counter equ 44h
output equ 45h
rev_buffer equ 46h
newRXD bit p3.2
rev_start bit 20h.3 ;0
rev_stop bit 20h.4 ;1
;--------------------------------------------------------------
uart_init:
mov scon,#40h ;it was 50h, we need clr ren, so we
; will not be influenced by receiving
;data from GSM module
mov tmod,#22h
mov tl1,#0fdh
mov th1,#0fdh
mov ie,#91h
clr tf0
setb it0
setb tr1
ret
;--------------------------------------------------------------
;--------------------------------------------------------------
int0_inter:
clr ex0
push 0
push acc
push dpl
push dph
;mov r0,rev_buffer
mov r0,rev_buffer ;;;
call read_byte
mov a,output
49
cjne a,#24h, check0_int0_inter ;24h='$'
setb rev_start
clr rev_stop
check0_int0_inter:
jnb rev_start,exit_int0_inter
;mov a,output
mov @r0,a
inc rev_buffer ;;*** inc r0
cjne a,#0ah,exit_int0_inter
clr rev_start
setb rev_stop
mov rev_buffer,#50h ;;;;;;;;;;; reverse value of rev_buffer
;;reti ;;;;;;;
exit_int0_inter:
clr ie0
pop dph
pop dpl
pop acc
pop 0
setb ex0
ret
;--------------------------------------------------------------
;--------------------------------------------------------------
read_byte:
mov output,#00h
mov counter,#08h
setb tr0
mov th0,#0a0h
mov tl0,#0a0h
clr tf0
call wait_tf0
next0_read_byte:
50
mov a,output
clr c
rrc a
;rr a ;;;;
mov output,a
jnb newRXD,next1_read_byte
mov a,output
orl a,#80h
mov output,a ;;;;;;
next1_read_byte:
call wait_tf0
djnz counter,next0_read_byte
clr tr0
ret
;--------------------------------------------------------------
;-----------------------------------------------------
wait_tf0:
jnb tf0,$
clr tf0
ret
;-----------------------------------------------------
;-----------------------------------------------------
;Name of Subprogram: serial
;Function:subprogram for supporting function send
;input:a
;output:None
;Effects: sbuf,ti
;-----------------------------------------------------
serial_send:
clr es
mov sbuf,a
jnb ti,$
clr ti
51
setb es
ret
;-----------------------------------------------------
end
ПРИЛОЖЕНИЕ 3. Программный код разработанной системы
52
Листинг 3. proj_init.asm
public project_init
public waiting_commands
ss0 segment code
rseg ss0
cxpos equ 21h
cypos equ 22h
str_loca_sms equ 33h
comma_res_start equ 37h
output equ 45h
rev_buffer equ 46h
key_vail bit 20h.0
rev_start bit 20h.3 ;0
rev_stop bit 20h.4 ;1
time_or_locat bit 20h.5
lati_or_longti bit 20h.7
;----------------------------------------------------------------------
;External functions for LCD operations
extrn code(lcd_init)
extrn code(write_com)
extrn code(write_data)
extrn code(delay3ms)
extrn code(put_str)
extrn code(uart_init)
;----------------------------------------------------------------------
dula bit p2.6
wela bit p2.7
project_init:
call environment_init
53
call lcd_init
call info_display
call uart_init
ret
environment_init:
clr dula
clr wela
clr key_vail
clr rev_start
clr rev_stop
clr lati_or_longti
clr time_or_locat
mov output,#00h
mov rev_buffer,#50h ;keep buffer starts from 50h
mov comma_res_start,#0a0h ;the beginning address for
keeping result
mov str_loca_sms,#0e0h ;the beginning address for
saving location for sms sending
ret
info_display:
mov cxpos,#00h
mov cypos,#00h
mov dptr,#table0
call put_str
mov cxpos,#00h
mov cypos,#01h
mov dptr,#table1
call put_str
ret
waiting_commands:
mov cxpos,#00h
mov cypos,#00h
54
mov dptr,#table9
call put_str
mov cxpos,#00h
mov cypos,#01h
mov dptr,#table10
call put_str
ret
table0: db "Init...",00h
table1: db "BY ZHANG JINGYI",00h
table9: db "Waiting commands",00h
table10: db "you have 5s...",00h
end
55
ПРИЛОЖЕНИЕ 3. Программный код разработанной системы
Листинг 4. lcd.asm
public lcd_init
public write_com
public write_data
public put_str
public delay3ms
ss1 segment code
rseg ss1
lcdrs bit p3.5
lcdrw bit p2.1
lcden bit p3.4
cxpos equ 21h
cypos equ 22h
;-------------------------------------------------
;Name of Subprogram: lcd_init
;Function:Initialize LCD control unit
;input:None
;output:None
;Effects: The values of R0 and ACC
;-------------------------------------------------
lcd_init:
mov a,#01h
call write_com
call delay3ms
mov a,#38h
call write_com
call delay3ms
mov a,#0fh
call write_com
call delay3ms
56
mov a,#06h
call write_com
call delay3ms
mov a,#80h
call write_com
call delay3ms
ret
;--------------------------------------------------
;-------------------------------------------------
;Name of Subprogram: write_com
;Function:Send command to the control unit of LCD
;input:A
;output:None
;Effects: The value of R0
;-------------------------------------------------
write_com:
clr lcdrs
clr lcdrw
mov p0,a
call delay3ms
setb lcden
call delay3ms
clr lcden
ret
;-------------------------------------------------
;-------------------------------------------------
;Name of Subprogram: write_data
;Function:Send data to the control unit of LCD
;input:A
;output:None
;Effects: The value of R0
;-------------------------------------------------
57
write_data:
setb lcdrs
clr lcdrw
mov p0,a
call delay3ms
setb lcden
call delay3ms
clr lcden
ret
;-------------------------------------------------
;-------------------------------------------------
;Name of Subprogram: lcd_read
;Function:Read data from the control unit of LCD
;input:None
;output:A
;Effects: The value of R0
;-------------------------------------------------
lcd_read:
call lcd_wait_idle
mov p0,#0ffh
setb lcdrs
setb lcdrw
setb lcden
nop
nop
mov a,p0
clr lcden
ret
;-------------------------------------------------
;-------------------------------------------------
;Name of Subprogram: lcd_wait_idle
;Function:Busy check of the LCD control unit
;input:None
;output:None
;Effects: The value of R0
;-------------------------------------------------
58
lcd_wait_idle:
push acc ;Generally,before
;reading and writing
;operations, the 7 bit
;of SW of LCD control
;unit must be checked.
;only when d7=0,the op
;eration of reading and
;writing would be accepted.
mov p0,#0ffh
clr lcdrs
setb lcdrw
setb lcden
mov r0,#20
wtd_pa: ;D7=0 means that LCD control
nop ;unit is idle, so quit from
nop ;the busy check.
jnb p0.7,wtd_lax
djnz r0,wtd_pa ;D7=1 menas that LCD control
nop ;unit is busy,so keep checking.
nop ;After 100us, if D7 still equals
;to 1 means that the LCD control
;unit works uncorrectlly.Also
;quit from the busy check
wtd_lax:
clr lcden
pop acc
ret
;----------------------------------------------------
;-----------------------------------------------------
;Name of Subprogram: put_str
;Function:At (cxpos,cypos) write string
;input:Dptr
;output:None
;Effects: The values of R0,ACC,DPTR
59
;-----------------------------------------------------
put_str:
clr a
movc a,@a+dptr
jz psr_lax ;0 means the end of the string
call put_char ;write one char
call char_cursor_next ;move the pozision
;to the next
inc dptr ;move the string point to
;the next
jmp put_str ;re-read string
psr_lax:
ret
;------------------------------------------------------
;-----------------------------------------------------
;Name of Subprogram: put_char
;Function:At (cxpos,cypos) write char
;input:None
;output:None
;Effects: None
;-----------------------------------------------------
put_char:
call char_lcd_pos
call write_data
ret
;-----------------------------------------------------
;-----------------------------------------------------
;Name of Subprogram: char_lcd_pos
;Function:Set the DDRAM address of pozision(cxpos,cypos)
;input:None
;output:None
;Effects: None
;-----------------------------------------------------
60
char_lcd_pos:
push acc
anl cxpos,#0fh
anl cypos,#01h
mov a,cypos
cjne a,#00h,lps_lay
mov a,cxpos
jmp lps_lax
lps_lay:
mov a,cxpos
add a,#40h
lps_lax:
orl a,#80h
call write_com
pop acc
ret
;------------------------------------------------------
;-----------------------------------------------------
;Name of Subprogram: char_cursor_next
;Function:Set the char to the next avilable pozision
;input:None
;output:None
;Effects: The value of R0
;-----------------------------------------------------
char_cursor_next:
inc cxpos
anl cxpos,#0fh
mov r0,cxpos
cjne r0,#00h,csn_lax
inc cypos
anl cypos,#01h
csn_lax:
ret
;----------------------------------------------------
61
;-------------------------------------------------
;Name of Subprogram: delay3ms
;Function:3 ms delay
;input:None
;output:None
;Effects: The values of R1 and R2
;-------------------------------------------------
delay3ms:
push 1
mov r1,#15
dl3_pa:
mov r2,#100
djnz r2,$
djnz r1,dl3_pa
pop 1
ret
;------------------------------------------------
end
62
ПРИЛОЖЕНИЕ 3. Программный код разработанной системы
Листинг 5. gps_operation.asm
public gps_rmc_parse
ss3 segment code
rseg ss3
extrn code(write_com) ;;;
extrn code(write_data) ;;;
extrn code(put_str)
extrn code(send_sms)
extrn code(status_check)
extrn code(get_comma_string)
extrn code(get_second_mul)
extrn code(anal_temper)
time_or_locat bit 20h.5
gps_dat_vaild bit 20h.6
lati_or_longti bit 20h.7
one_lati equ 40h
mten_lati equ 41h
mone_lati equ 42h
cxpos equ 21h
cypos equ 22h
str_loca_sms equ 33h
comma_start equ 35h
comma_content_size equ 36h
comma_res_start equ 37h
which_comma equ 38h
rev_buffer equ 46h
tmp equ 48h
;---------------------------------------------------------------------------
gps_rmc_parse:
push 1
63
mov a,55h ;$GPRMC, MCU saves 'C' in 55h
cjne a,#43h,exit_gps_rmc_parse ;43h='C' in asscii
mov a,#01h
call write_com
checking:
call status_check
jnb gps_dat_vaild,warning_gps_rmc_parse
clr gps_dat_vaild
jnb time_or_locat,disp_time
clr time_or_locat
call get_location
lcall DEL1S
lcall DEL1S
lcall DEL1S
lcall anal_temper
lcall DEL1S
lcall DEL1S
lcall DEL1S
;;lcall send_sms ;;;;;
sjmp exit_gps_rmc_parse
disp_time:
call get_time
setb time_or_locat
lcall DEL1S
lcall DEL1S
lcall DEL1S
sjmp exit_gps_rmc_parse
warning_gps_rmc_parse:
64
mov cxpos,#00h
mov cypos,#00h
mov dptr,#table2
call put_str
mov cxpos,#00h
mov cypos,#01h
mov dptr,#table3
call put_str
exit_gps_rmc_parse:
pop 1
ret
;------------------------------------------------------------------------
get_location:
mov a,#01h
lcall write_com
call get_latitude
call get_longitude
ret
;------------------------------------------------------------------------
;------------------------------------------------------------------------
get_time:
push 1
mov a,#01h
call write_com
mov cxpos,#00h
mov cypos,#00h
mov dptr,#table4
call put_str
mov a,#0c0h
call write_com
mov comma_start, rev_buffer
mov which_comma,#01h
65
mov comma_content_size,#00h
call get_comma_string
mov r1,comma_res_start
hour_get_time:
mov a,@r1
inc r1
call write_data
mov a,@r1
inc r1
call write_data
mov a,#68h
call write_data ;68h='h'
minute_get_time:
mov a,@r1
inc r1
call write_data
mov a,@r1
inc r1
call write_data
mov a,#6dh
call write_data ;6dh='m'
second_get_time:
mov a,@r1
inc r1
call write_data
mov a,@r1
inc r1
call write_data
mov a,#73h
call write_data ;73h='m'
exit_get_time:
pop 1
ret
;------------------------------------------------------------------------
66
/*
;---------------------------------------------------------------------
;Name: get_latitude
;input: None
;output: Tht output will be like like (ten_lati)(one_lati).(mten_lati)
(mone_lati).(sten_lati)(sone_lati)
;effect: r1
get_latitude:
push 1
mov comma_start, rev_buffer
mov which_comma,#03h
mov comma_content_size,#00h
call get_comma_string
mov which_comma,#04h
call display_lati_or_longti
pop 1
ret
;----------------------------------------------------------------------------
---
;---------------------------------------------------------------------
;input: None
;output: Tht output will be like like (ten_lati)(one_lati).(mten_lati)
(mone_lati).(sten_lati)(sone_lati)
;effect: r1
get_longitude:
push 1
mov comma_start, rev_buffer
67
mov which_comma,#05h
mov comma_content_size,#00h
call get_comma_string
mov which_comma,#06h
mov a,#0c0h
call write_com
call display_lati_or_longti
pop 1
ret
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
;Name: display_lati_or_longti
;input: dptr,which_comma
;effect: r7
display_lati_or_longti:
push 1
push 0
;mov r0,str_loca_sms
mov r7,#00h
mov r1,comma_res_start
jb lati_or_longti,display_increase
setb lati_or_longti
mov r0,str_loca_sms
sjmp loop2_display_lati_or_longti
display_increase:
inc r1
mov r0,str_loca_sms
mov str_loca_sms,#0e0h ;get back the init value
clr lati_or_longti
68
loop2_display_lati_or_longti:
mov a,@r1
movx @r0,a ;;
inc r0 ;;
call write_data
inc r1
inc r7
cjne r7,#02h,loop2_display_lati_or_longti
mov a,#64h
movx @r0,a ;;
inc r0 ;;
call write_data ;64h=d(degree)
loop3_display_lati_or_longti:
mov a,@r1
movx @r0,a ;;
inc r0 ;;
call write_data
inc r1
inc r7
cjne r7,#04h,loop3_display_lati_or_longti
mov a,#6dh ;6d=m(Minute)
movx @r0,a ;;
inc r0 ;;
call write_data
loop4_display_lati_or_longti:
inc r1 ;for skipping the symbol '.'
call get_second_mul
mov a,r2
movx @r0,a ;;
inc r0 ;;
call write_data
mov a,r3
69
movx @r0,a ;;
inc r0 ;;
call write_data
mov a,#2eh
movx @r0,a ;;
inc r0 ;;
call write_data ;2eh='.'
mov a,r4
movx @r0,a ;;
inc r0 ;;
call write_data
mov a,#73h ;73h=s(Second)
movx @r0,a ;;
inc r0 ;;
call write_data
mov comma_start, rev_buffer
mov comma_content_size,#00h
call get_comma_string
mov r1,comma_res_start
mov a,@r1
movx @r0,a ;;
inc r0 ;;
call write_data
jnb lati_or_longti,exit_display_lati_or_longti
mov a,#0ah
movx @r0,a ;we need use movx
inc r0
mov str_loca_sms,r0
exit_display_lati_or_longti:
pop 0
pop 1
70
ret
;---------------------------------------------------------------------------
DEL1S:MOV R7,#10
D1: MOV R6,#200
D2: MOV R5,#250
DJNZ R5,$
DJNZ R6,D2
DJNZ R7,D1
RET
;---------------------------------------------------------------------------
table2: db "Searching...",00h
table3: db "Waiting response",00h
table4: db "Current time:",00h
end
ПРИЛОЖЕНИЕ 3. Программный код разработанной системы
Листинг 6. gps_string_anal.asm
public status_check
public get_comma_string
ss4 segment code
rseg ss4
time_or_locat bit 20h.5
gps_dat_vaild bit 20h.6
lati_or_longti bit 20h.7
one_lati equ 40h
71
mten_lati equ 41h
mone_lati equ 42h
cxpos equ 21h
cypos equ 22h
str_loca_sms equ 33h
comma_start equ 35h
comma_content_size equ 36h
comma_res_start equ 37h
which_comma equ 38h
rev_buffer equ 46h
tmp equ 48h
;------------------------------------------------------------------------
status_check:
push 1
mov comma_start, rev_buffer
mov which_comma,#02h
mov comma_res_start,#0a0h
mov comma_content_size,#00h
call get_comma_string
mov r1,comma_res_start
mov a,@r1
cjne a,#41h,exit_status_check ;41h=A means
data valid
setb gps_dat_vaild
exit_status_check:
pop 1
ret
;------------------------------------------------------------------------
;---------------------------------------------------------------------
;input: which_comma- String gets from which comma
; comma_start-pointer to the beginning of a string
; comma_content_size=0
72
;output:comma_content_size-size of the content between two commas
; comma_res_start the beginning address for keeping result
get_comma_string:
push 1
push 0
mov r0,comma_res_start
mov r2,which_comma
mov r1,comma_start
loop_get_comma_str:
mov a,@r1
cjne a,#2ch,next0_get_comma_str ;2ch equals to ','
djnz r2,next1_get_comma_str
get_num_sat:
inc r1
mov a,@r1
cjne a,#2ch,next2_get_comma_str ;2ch equals to ','
sjmp exit_get_comma_str
next0_get_comma_str:
inc r1
cjne r1,#9fh,loop_get_comma_str ;the end of the string 9fh
(address)
next1_get_comma_str:
inc r1
sjmp loop_get_comma_str
next2_get_comma_str:
mov @r0,a
inc r0
inc comma_content_size
sjmp get_num_sat
exit_get_comma_str:
pop 0
pop 1
73
ret
;----------------------------------------------------------------------
end
ПРИЛОЖЕНИЕ 3. Программный код разработанной системы
Листинг 7. gps_info_calcu.asm
public get_second_mul
ss5 segment code
rseg ss5
tmp equ 48h
;---------------------------------------------------------------------------
;input: a(keeps)
;output: R2R3.R4s
74
get_second_mul:
mov a,@r1
inc r1
subb a,#30h
swap a
mov tmp,a
mov a,@r1
subb a,#30h
add a,tmp
call bcd_to_hex
mov b,#06h
mul ab
mov r6,b
mov r7,a
call hex2_to_bcd
mov a,r4
add a,#30h
mov r2,a ;write back to r2
mov a,r5
anl a,#0f0h
swap a
add a,#30h
mov r3,a ;write back to r3
mov a,r5
anl a,#0fh
add a,#30h
mov r4,a ;write back to r4
ret
75
;-------------------------
;input:a
;output:a
bcd_to_hex:
mov b,#10H
div ab
mov r4,b
mov b,#10
mul ab
add a,r4
ret
;-------------------------
;-----------------------------------------
;input: R6,R7
;output: R3,R4,R5,change register group
hex2_to_bcd:
clr a
mov r3,a
mov r4,a
mov r5,a
mov r2,#10h
loop0_hex2_to_bcd:
mov a,r7
rlc a
mov r7,a
mov a,r6
rlc a
mov r6,a
mov a,r5
addc a,r5
da a
mov r5,a
mov a,r4
addc a,r4
da a
76
mov r4,a
mov a,r3
addc a,r3
mov r3,a
djnz r2,loop0_hex2_to_bcd
exit_loop0_hex2_to_bcd:
ret
;---------------------------------------------
end
ПРИЛОЖЕНИЕ 3. Программный код разработанной системы
Листинг 8. sms.asm
public send_sms
ss6 segment code
rseg ss6
extrn code(serial_send)
str_loca_sms equ 33h
77
counter1 equ 49h
bai_c equ 3dh
sh_c equ 3eh
g_c equ 3fh
;-------------------------------------------------
;Name of Subprogram: delay3ms
;Function:3 ms delay
;input:None
;output:None
;Effects: The values of R1 and R2
;-------------------------------------------------
delay3ms:
mov r1,#15
dl3_pa:
mov r2,#100
djnz r2,$
djnz r1,dl3_pa
ret
;------------------------------------------------
;-------------------------------------------------------
;Name of Subprogram: delay105ms
;Function:Delay 105 ms
;input: R3
;output: None
;Effects: R1,R2,R3
;-------------------------------------------------------
delay105ms:
mov r3,#23h
cycle4:
call delay3ms
djnz r3,cycle4
78
ret
;-------------------------------------------------------
send_sms:
mov counter1,#05h
mov dptr,#table13
lcall send
lcall delay105ms
lcall delay105ms
lcall delay105ms
mov counter1,#0bh
mov dptr,#table14
lcall send
lcall delay105ms
lcall delay105ms
lcall delay105ms
mov counter1,#0dh
mov dptr,#table15
lcall send
lcall delay105ms
lcall delay105ms
lcall delay105ms
mov counter1,#14h
mov dptr,#table16
lcall send
lcall delay105ms
lcall delay105ms
lcall delay105ms
mov counter1,#13h
mov dptr,#table17
79
lcall send
mov counter1,#02h
mov dptr,#table19
lcall send
lcall delay105ms
lcall delay105ms
lcall delay105ms
mov counter1,#0bh
mov dptr,#table7
lcall send
mov counter1,#19h
call send_location
call send_temper
mov a,#1ah
lcall serial_send
lcall delay105ms
lcall delay105ms
lcall delay105ms
ret
;-----------------------------------------------------
;-----------------------------------------------------
send_location:
push 0
push acc
mov r0,str_loca_sms
loop0_send_location:
movx a,@r0
inc r0
80
call serial_send
call delay3ms
djnz counter1,loop0_send_location
exit_send_location:
pop acc
pop 0
ret
;-----------------------------------------------------
;-----------------------------------------------------
send_temper:
push acc
mov counter1,#09h
mov dptr,#table6
lcall send
mov a,bai_c
call serial_send
call delay3ms
mov a,sh_c
call serial_send
call delay3ms
mov a,#2eh ;2e='.'
call serial_send
call delay3ms
mov a,g_c
call serial_send
call delay3ms
mov a,#43h
call serial_send
call delay3ms
81
exit_send_temper:
pop acc
ret
;-----------------------------------------------------
;-----------------------------------------------------
;Name of Subprogram: send
;Function:send string to serial port
;input:DPTR,counter
;output:None
;Effects: R1,R2
;-----------------------------------------------------
send:
cycle7:
mov a,#00h
movc a,@a+dptr
lcall serial_send
lcall delay3ms
inc dptr
djnz counter1,cycle7
ret
;-----------------------------------------------------
table6: db 0ah,"Local T:",00h
table7: db 0ah,"Location:",0ah
table13: db 0ah,"AT",0dh,0ah
table14: db "AT+CMGF=1",0dh,0ah
table15: db "AT+CSCS=GSM",0dh,0ah
table16: db "AT+CSMP=17,167,0,0",0dh,0ah
table17: db "AT+CMGS=89030944159"
table18: db "Hello World!",1ah
82
table19: db 0dh,0ah
end
ПРИЛОЖЕНИЕ 3. Программный код разработанной системы
Листинг 9. Sensor_temp.asm
public anal_temper
ss7 segment code
rseg ss7
extrn code(write_com) ;;;
extrn code(write_data) ;;;
extrn code(put_str)
cxpos equ 21h
cypos equ 22h
temper_l equ 3bh
temper_h equ 3ah
temper_d equ 3ch
temper_num equ 4ah
flag1 bit 20h.1
83
dq bit p2.2
bai_c equ 3dh
sh_c equ 3eh
g_c equ 3fh
anal_temper:
push 0
mov a,#01h
lcall write_com
mov cxpos,#00h
mov cypos,#00h
mov dptr,#table5
lcall put_str
lcall get_temper
lcall temper_cov
mov a,temper_num
anl a,#0f0h
swap a
add a,#30h
mov bai_C,a
lcall write_data
mov a,temper_num
anl a,#0fh
add a,#30h
mov sh_c,a
lcall write_data
mov a,#2eh ;2e='.'
lcall write_data
mov a,temper_d
84
add a,#30h
mov g_c,a
lcall write_data
mov a,#43h ;43h='C'
lcall write_data
pop 0
ret
;------------------
get_temper:
lcall init_1820
setb dq
bcd:
jb flag1,s22
ljmp bcd
s22:
lcall delay1
mov a,#0cch
lcall write_1820
mov a,#44h
lcall write_1820
nop
lcall delay
lcall delay
cba:
lcall init_1820
jb flag1,abc
ljmp cba
abc:
lcall delay1
mov a,#0cch
lcall write_1820
mov a,#0beh
lcall write_1820
85
lcall read_18200
ret
;------------------
read_1820:
mov r2,#8
re1:
clr c
setb dq
nop
nop
clr dq
nop
nop
nop
setb dq
mov r3,#7
djnz r3,$
mov c,dq
mov r3,#23
djnz r3,$
rrc a
djnz r2,re1
ret
;-------------------
write_1820:
mov r2,#8
clr c
wr1:
clr dq
mov r3,#6
djnz r3,$
rrc a
mov dq,c
mov r3,#23
djnz r3,$
86
setb dq
nop
djnz r2,wr1
setb dq
ret
;-------------------
read_18200:
mov r4,#2
mov r1,#3bh
re00:
mov r2,#8
re01:
clr c
setb dq
nop
nop
clr dq
nop
nop
nop
setb dq
mov r3,#7
djnz r3,$
mov c,dq
mov r3,#23
djnz r3,$
rrc a
djnz r2,re01
mov @r1,a
dec r1
djnz r4,re00
ret
;-------------------
temper_cov:
mov a,#0f0h
87
anl a,temper_l
swap a
mov temper_num,a
mov a,temper_l
jnb acc.3,temper_cov1
inc temper_num
temper_cov1:
mov a,temper_h
anl a,#07h
swap a
orl a,temper_num
mov temper_num,a
mov a,#0fh
anl a,temper_l
mov temper_d,a
clr c
subb a,#10
jc jianlo
mov temper_d,a
inc temper_num
jianlo:
lcall bin_bcd
ret
;-------------------
bin_bcd:
mov dptr,#temp_tab
mov a,temper_num
movc a,@a+dptr
mov temper_num,a
ret
;-------------------
init_1820:
88
setb dq
nop
clr dq
mov r0,#80h
tsr1:
djnz r0,tsr1
setb dq
mov r0,#25h ;96us-25h
tsr2:
djnz r0,tsr2
jnb dq,tsr3
ljmp tsr4
tsr3:
setb flag1
ljmp tsr5
tsr4:
clr flag1
ljmp tsr7
tsr5:
mov r0,#06bh ;200us
tsr6:
djnz r0,tsr6
tsr7:
setb dq
ret
;------------------
re_config:
jb flag1,re_config1
ret
re_config1:
mov a,#0cch
lcall write_1820
mov a,#4eh
lcall write_1820
mov a,#00h
lcall write_1820
89
mov a,#00h
lcall write_1820
mov a,#7fh
lcall write_1820
ret
;------------------
delay:
mov r7,#2h
min:
djnz r7,ys500
ret
ys500:
lcall ys500us
ljmp min
ys500us:
mov r6,#200
djnz r6,$
ret
delay1:
mov r7,#20h
djnz r7,$
ret
temp_tab:
db 00h,01h,02h,03h,04h,05h,06h,07h
db 08h,09h,10h,11h,12h,13h,14h,15h
db 16h,17h,18h,19h,20h,21h,22h,23h
db 24h,25h,26h,27h,28h,29h,30h,31h
db 32h,33h,34h,35h,36h,37h,38h,39h
db 40h,41h,42h,43h,44h,45h,46h,47h
db 48h,49h,50h,51h,52h,53h,54h,55h
db 56h,57h,58h,59h,60h,61h,62h,63h
db 64h,65h,66h,67h,68h,69h,70h,71h
db 72h,73h,74h,75h,76h,77h,78h,79h
db 80h,81h,82h,83h,84h,85h,86h,87h
90
db 88h,89h,90h,91h,92h,93h,94h,95h
db 96h,97h,98h,99h
table5: db "Local T:",00h
end
91

More Related Content

Similar to report_bs

День инноваций Сколково в МИРЭА
День инноваций Сколково в МИРЭАДень инноваций Сколково в МИРЭА
День инноваций Сколково в МИРЭАAlbert Yefimov
 
Презентация ИТ Кластер Сколково
Презентация  ИТ Кластер СколковоПрезентация  ИТ Кластер Сколково
Презентация ИТ Кластер СколковоAlbert Yefimov
 
Геоинформационные системы. Расставляем вещи по местам в интернете вещей
Геоинформационные системы. Расставляем вещи по местам в интернете вещейГеоинформационные системы. Расставляем вещи по местам в интернете вещей
Геоинформационные системы. Расставляем вещи по местам в интернете вещейSergey Naumov
 
Презентация Сколково на Национальном Суперкомпьютерном Форуме в Перееславль-З...
Презентация Сколково на Национальном Суперкомпьютерном Форуме в Перееславль-З...Презентация Сколково на Национальном Суперкомпьютерном Форуме в Перееславль-З...
Презентация Сколково на Национальном Суперкомпьютерном Форуме в Перееславль-З...Albert Yefimov
 
Презентация Сколково на конференции Перспективные системы и задачи упралвления
 Презентация Сколково на конференции Перспективные системы и задачи упралвления Презентация Сколково на конференции Перспективные системы и задачи упралвления
Презентация Сколково на конференции Перспективные системы и задачи упралвленияAlbert Yefimov
 
NeoQUEST: Интернет в порядке вещей
NeoQUEST: Интернет в порядке вещейNeoQUEST: Интернет в порядке вещей
NeoQUEST: Интернет в порядке вещейNeo_QUEST
 
Модернизация ИТ-инфраструктуры
Модернизация ИТ-инфраструктурыМодернизация ИТ-инфраструктуры
Модернизация ИТ-инфраструктурыDatamodel
 
Альберт Ефимов "Перспективные направления исследований в области робототехник...
Альберт Ефимов "Перспективные направления исследований в области робототехник...Альберт Ефимов "Перспективные направления исследований в области робототехник...
Альберт Ефимов "Перспективные направления исследований в области робототехник...AINL Conferences
 
Сколково. Кластер ИТ
Сколково. Кластер ИТСколково. Кластер ИТ
Сколково. Кластер ИТVasily Ryzhonkov
 
День Инноваций Сколково в Томском Государственном Университете
День Инноваций Сколково в Томском Государственном УниверситетеДень Инноваций Сколково в Томском Государственном Университете
День Инноваций Сколково в Томском Государственном УниверситетеAlbert Yefimov
 
Dezvoltarea retelelor mobile.pptx
Dezvoltarea retelelor mobile.pptxDezvoltarea retelelor mobile.pptx
Dezvoltarea retelelor mobile.pptxITI22121ITI22121
 
брошюра сколково кластер ит
брошюра сколково кластер итброшюра сколково кластер ит
брошюра сколково кластер итThe Skolkovo Foundation
 
Мультимедийные сенсорные сети на основе сверхширокополосных хаотических радио...
Мультимедийные сенсорные сети на основе сверхширокополосных хаотических радио...Мультимедийные сенсорные сети на основе сверхширокополосных хаотических радио...
Мультимедийные сенсорные сети на основе сверхширокополосных хаотических радио...Anamezon
 
Сенсорные системы и транспорт в режиме реального времени с использованием сов...
Сенсорные системы и транспорт в режиме реального времени с использованием сов...Сенсорные системы и транспорт в режиме реального времени с использованием сов...
Сенсорные системы и транспорт в режиме реального времени с использованием сов...ООО "ИНТРО-ГИС"
 
Информационные технологии в эру Больших данных
Информационные технологии в эру Больших данныхИнформационные технологии в эру Больших данных
Информационные технологии в эру Больших данныхСергей Макрушин
 
Информационные технологии в эру Больших данных
Информационные технологии в эру Больших данныхИнформационные технологии в эру Больших данных
Информационные технологии в эру Больших данныхSergey Makrushin
 
4 Botuz 2008 Infoforum 1[1]
4 Botuz 2008 Infoforum 1[1]4 Botuz 2008 Infoforum 1[1]
4 Botuz 2008 Infoforum 1[1]dyminski
 
облачные вычисленее.pptx
облачные вычисленее.pptxоблачные вычисленее.pptx
облачные вычисленее.pptxAnelBektibay1
 
Подход к обеспечению безопасности IoT в Enterprise
Подход к обеспечению безопасности IoT в EnterpriseПодход к обеспечению безопасности IoT в Enterprise
Подход к обеспечению безопасности IoT в EnterprisePositive Hack Days
 

Similar to report_bs (20)

День инноваций Сколково в МИРЭА
День инноваций Сколково в МИРЭАДень инноваций Сколково в МИРЭА
День инноваций Сколково в МИРЭА
 
Презентация ИТ Кластер Сколково
Презентация  ИТ Кластер СколковоПрезентация  ИТ Кластер Сколково
Презентация ИТ Кластер Сколково
 
Геоинформационные системы. Расставляем вещи по местам в интернете вещей
Геоинформационные системы. Расставляем вещи по местам в интернете вещейГеоинформационные системы. Расставляем вещи по местам в интернете вещей
Геоинформационные системы. Расставляем вещи по местам в интернете вещей
 
Презентация Сколково на Национальном Суперкомпьютерном Форуме в Перееславль-З...
Презентация Сколково на Национальном Суперкомпьютерном Форуме в Перееславль-З...Презентация Сколково на Национальном Суперкомпьютерном Форуме в Перееславль-З...
Презентация Сколково на Национальном Суперкомпьютерном Форуме в Перееславль-З...
 
Презентация Сколково на конференции Перспективные системы и задачи упралвления
 Презентация Сколково на конференции Перспективные системы и задачи упралвления Презентация Сколково на конференции Перспективные системы и задачи упралвления
Презентация Сколково на конференции Перспективные системы и задачи упралвления
 
NeoQUEST: Интернет в порядке вещей
NeoQUEST: Интернет в порядке вещейNeoQUEST: Интернет в порядке вещей
NeoQUEST: Интернет в порядке вещей
 
Модернизация ИТ-инфраструктуры
Модернизация ИТ-инфраструктурыМодернизация ИТ-инфраструктуры
Модернизация ИТ-инфраструктуры
 
Альберт Ефимов "Перспективные направления исследований в области робототехник...
Альберт Ефимов "Перспективные направления исследований в области робототехник...Альберт Ефимов "Перспективные направления исследований в области робототехник...
Альберт Ефимов "Перспективные направления исследований в области робототехник...
 
Сколково. Кластер ИТ
Сколково. Кластер ИТСколково. Кластер ИТ
Сколково. Кластер ИТ
 
День Инноваций Сколково в Томском Государственном Университете
День Инноваций Сколково в Томском Государственном УниверситетеДень Инноваций Сколково в Томском Государственном Университете
День Инноваций Сколково в Томском Государственном Университете
 
Dezvoltarea retelelor mobile.pptx
Dezvoltarea retelelor mobile.pptxDezvoltarea retelelor mobile.pptx
Dezvoltarea retelelor mobile.pptx
 
брошюра сколково кластер ит
брошюра сколково кластер итброшюра сколково кластер ит
брошюра сколково кластер ит
 
Мультимедийные сенсорные сети на основе сверхширокополосных хаотических радио...
Мультимедийные сенсорные сети на основе сверхширокополосных хаотических радио...Мультимедийные сенсорные сети на основе сверхширокополосных хаотических радио...
Мультимедийные сенсорные сети на основе сверхширокополосных хаотических радио...
 
Сенсорные системы и транспорт в режиме реального времени с использованием сов...
Сенсорные системы и транспорт в режиме реального времени с использованием сов...Сенсорные системы и транспорт в режиме реального времени с использованием сов...
Сенсорные системы и транспорт в режиме реального времени с использованием сов...
 
Информационные технологии в эру Больших данных
Информационные технологии в эру Больших данныхИнформационные технологии в эру Больших данных
Информационные технологии в эру Больших данных
 
Информационные технологии в эру Больших данных
Информационные технологии в эру Больших данныхИнформационные технологии в эру Больших данных
Информационные технологии в эру Больших данных
 
4 Botuz 2008 Infoforum 1[1]
4 Botuz 2008 Infoforum 1[1]4 Botuz 2008 Infoforum 1[1]
4 Botuz 2008 Infoforum 1[1]
 
презентация линтех
презентация линтехпрезентация линтех
презентация линтех
 
облачные вычисленее.pptx
облачные вычисленее.pptxоблачные вычисленее.pptx
облачные вычисленее.pptx
 
Подход к обеспечению безопасности IoT в Enterprise
Подход к обеспечению безопасности IoT в EnterpriseПодход к обеспечению безопасности IoT в Enterprise
Подход к обеспечению безопасности IoT в Enterprise
 

report_bs

  • 1. Санкт-петербургский государственный политехнический университет Институт информационных технологий и управления Кафедра компьютерных систем и программных технологий Работа допущена к защите Зав. кафедрой профессор __________ В. Ф. Мелехин «___» ____________ 2013 г. ВЫПУСКНАЯ РАБОТА БАКАЛАВРА Тема: Разработка и исследование распределенных встраиваемых систем сбора данных с применением средств глобального позиционировании Направление: 220200 – Автоматизация и управление Выполнил, студент гр. 4081/11 _________ Чжан Цзини Руководитель,к.т.н.,доц. _________А.Е.Васильев Санкт-Петербург 2013
  • 2. РЕФЕРАТ стр.90, рис.31, табл.1 РАСПРЕДЕЛЕННЫЕ СИСТЕМЫ СБОРА ДАННЫХ, МИКРОКОНТРОЛЛЕР, ВСТРАИВАЕМАЯ СИСТЕМА УПРАВЛЕНИЯ, МОДУЛЬ GPS, МОДУЛЬ GSM, ИНТЕРНЕТ ВЕЩЕЙ В работе выполнена разработка распределенной программно- аппаратной системы беспроводного сбора данных, использующей GPS для локализации местоположения и GSM для передачи данных. Целью работы является создние эффективных (в разработке и эксплуатации) средств постороения распределённых беспроводных систем сбора данных. Решаемые задачи: изучение существующих решений, выбор аппаратных средств, разработка программного обеспечения, проведение испытаний. 2
  • 3. СОДЕРЖАНИЕ 1.ОБЗОР ТЕХНОЛОГИЙ И СРЕДСТВ РАСПРЕДЕЛЕННОГО СБОРА ДАННЫХ...................................................................................................................5 1.1.Общие положения..........................................................................................5 1.2.Примеры систем распределенного сбора данных.......................................5 1.2.1.Модуль RuggedRouter®...........................................................................5 1.3.Постановка задачи..........................................................................................7 2.РАЗРАБОТКА СТРУКТУРЫ И АППАРАТНОГО ОБЕСПЕЧЕНИЯ СИСТЕМЫ.................................................................................................................8 2.1.Плата TX-1C....................................................................................................8 2.2.Модуль GPS.....................................................................................................9 2.3.Модуль GSM.................................................................................................10 2.4.Общая схема системы..................................................................................10 3.РАЗРАБОТКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ........................................11 3.1.Программная реализация дополнительного последовательного порта. .11 3.2.Первичная настройка модуля GSM и AT команд.......................................13 3.3.Анализ информации о местоположении GPS............................................14 3.4.Сбор данных при помощи датчика.............................................................15 3.5.Общая структура программы MarDDAS....................................................17 4.ИССЛЕДОВАНИЯ РАЗРАБОТАННОЙ РАБОТЫ.............................................18 4.1.Тестирование программного последовательного порта...........................18 4.2.Тестирование модуля GSM..........................................................................18 4.3.Тестирование датчика температуры DS18B20..........................................18 4.4.Тестирование модуля GPS...........................................................................19 4.5.Комплексные испытания системы..............................................................19 4.6.Анализ точности...........................................................................................21 ЗАКЛЮЧЕНИЕ........................................................................................................21 СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ...............................................22 3
  • 4. ПРИЛОЖЕНИЕ 1. Понятие АТ команды..............................................................22 ПРИЛОЖЕНИЕ 2. Структура проекта..................................................................24 ПРИЛОЖЕНИЕ 3. Программный код разработанной системы..........................26 ПРИЛОЖЕНИЕ 3. Программный код разработанной системы..........................29 ПРИЛОЖЕНИЕ 3. Программный код разработанной системы..........................35 ПРИЛОЖЕНИЕ 3. Программный код разработанной системы..........................39 ПРИЛОЖЕНИЕ 3. Программный код разработанной системы..........................50 ПРИЛОЖЕНИЕ 3. Программный код разработанной системы..........................62 ПРИЛОЖЕНИЕ 3. Программный код разработанной системы..........................67 ПРИЛОЖЕНИЕ 3. Программный код разработанной системы..........................71 ПРИЛОЖЕНИЕ 3. Программный код разработанной системы..........................80 4
  • 5. ВВЕДЕНИЕ Человечество вступает в новую эру глобальных вычислений и коммуникаций. Огромный поток информации проходит через мобильную телефонную сеть, а разнообразные устройства стали неотъемлемой частью повседневной жизни миллионов людей. Развитие коммуникаций перевело это явление на новый этап, от приемопередатчиков малого радиуса действия к устройствам с приемопередатчиками на длинные дистанции. Родилась новая форма взаимодействия между людьми и устройствами, а также напрямую между устройствами. В прошлом, обмен информацией мог происходить лишь между людьми, теперь он происходит между любыми устройствами в любой точке мира в любое время. Интенсивность взаимодействия между устройствами будет увеличиваться и создавать совершенно новую сущность – “Интернет Вещей”. Он построен на отличительных особенностях сетей будущего, таких как возможность подключать устройства и предметы первой необходимости к большим базам данных и сетям, способность обнаружения изменения физического состояния объектов, способность использовать преимущества миниатюризации. 5
  • 6. Встроенный интеллект объектов сможет повысить производительность сетей путем выполнения локальной обработки информации. С помощью объединения в сети обработки информации, промышленные и бытовые системы будут увеличивать интеллектуальность и производительность, обнаруживать через датчики изменения в физической среде. Таким образом, даже малоразмерные частицы могут быть включены в сеть. Такое развитие может превратить сегодняшние статические объекты в динамические. Сенсорные сети могут обнаружить минимальные изменения окружающей среды и предотвратить катастрофу. Исследования показывают, что Интернет вещей будет широко использоваться на местном рынке и в международной торговле. Исследованию некоторых аспектов глобальных коммуникаций между устройствами и посвящается данная работа. Цель работы - создние эффективных (в разработке и эксплуатации) средств постороения распределённых беспроводных систем сбора данных. 6
  • 7. 1. ОБЗОР ТЕХНОЛОГИЙ И СРЕДСТВ РАСПРЕДЕЛЕННОГО СБОРА ДАННЫХ 1.1. Общие положения Автоматизированные системы сбора данных в настоящее время являются общедоступным средством получения экспериментальной информации, и связано это, в первую очередь, с широким распространением персональных компьютеров. Системы сбора данных применяются в научных исследованиях, управлении производственными процессами, мониторинге в промышленности, медицине, метеорологии, космонавтике и других областях человеческой деятельности. Автоматизированный сбор данных предлагает данные нового качества, которые невозможно получить иными средствами – это результаты статистической обработки огромного числа измерений, полученных в цифровой форме; возможность регистрации случайно появляющихся событий с недостижимой ранее разрешающей способностью по времени и амплитуде; регистрация быстрых процессов. Благодаря резкому удешевлению систем сбора данных по сравнению со стоимостью человеческого труда они нашли применение там, где ранее использовалась ручная регистрация данных: в теплицах, элеваторах, на метеостанциях, в процессе приемосдаточных и сертификационных испытаний продукции, на складах, в промышленных холодильниках, в котельных, при автоматизации научного эксперимента и т.п1 . 1 7
  • 8. Система сбора данных может быть распределенной, когда устройства ввода разнесены территориально по объекту сбора данных, а полученные данные сходятся к единому накопителю и обработчику данных с помощью сетевых технологий (сети Ethernet, Modbus, Profibus, DCON и др., беспроводные сети Bluetooth, Wi-Fi, GSM, ZigBee). Распределенные системы сбора данных допускают практически неограниченное наращивание числа каналов ввода, однако имеют ограничения на скорость передачи данных по сети. 1.2. Примеры систем распределенного сбора данных 1.2.1. Модуль RuggedRouter® Семейство устройств RuggedRouter® представляют собой устройства, интегрирующие брандмауэр, маршрутизатор и VPN сервер, обеспечивающие сетевую безопасность. RuggedRouter® могут применяться для создания безопасного периметра у критически важных участков систем во избежание вмешательства в работу сети вследствие специальных или случайных воздействий. Устройства идеально подходят для электроподстанций, промышленности и систем контроля дорожного трафика. Модули подключения беспроводного сотового модема для устройств RuggedRouter® - RuggedCell™, позволяют пользователям расширять границы сетей, достигая удалённых узлов широкополосными каналами с встроенными функциями балансировки сетевой нагрузки. Маршрутизатор может быть оснащён как GSM SIM решением, так и CDMA. Устройство приведено на следующем рисунке (Рисунок 1.1).2 Виктор Денисенко, Рафгат Кильметов. Распределенные системы сбора данных RealLab/ЭЛЕМЕНТНАЯ БАЗА: система сбора данных 2 8
  • 9. Рисунок 1. 1. Пример использовании RuggedRouter 1.2.2. Модуль ML-Module-Z ML-Module-Z(на рисунке 1.2) основаны на российской платформе MeshLogic для разработки беспроводных сенсорных сетей (на рисунке 1.3), имеющей множество преимуществ относительно других стандартных и проприетарных технологий, в частности, такие свойства, как: http://ruggedcom.ru 9
  • 10.  полностью многоячейковая топология сети;  самоорганизация и автоматический поиск маршрутов;  устойчивость к соканальной интерференции;  высокая масштабируемость и надежность доставки данных;  все узлы равноправны и являются маршрутизаторами;  возможна работа всех узлов от автономных источников питания Рисунок 1. 2. Беспроводной модуль ML-Module-Z Рисунок 1. 3. Беспроводная система сбора информации 1.2.3. Модуль ML-SM-SB 10
  • 11. Беспроводная система мониторинга ML-SM-SB (на рисунке 1.4) представляет собой аппаратно-программный комплекс для организации беспроводной сети с целью автоматического сбора данных от распределенных в пространстве датчиков. В типовом варианте система ML-SM состоит из множества беспроводных узлов ML-SM-N, к каждому из которых подключены внешние датчики через соответствующие модули сопряжения ML-SM-Sx, одного беспроводного шлюза ML-SM-G и сервера на базе персонального компьютера с прикладным программным обеспечением. Основные функции  организация беспроводной распределенной сети с произвольной топологией;  автоматический сбор по радиоканалу показаний датчиков;  накопление собранной информации в энергонезависимой памяти (архиве);  чтение информации из архива по запросу от сервера для ее отображения, обработки и анализа. Рисунок 1. 4. Внешний вид модуля ML-SM-SB 11
  • 12. 1.3. Постановка задачи У существующих систем имеется ряд недостатков, а именно:  высокая стоимость системы;  сложность написания программного обеспечения;  высокие энергозатраты. Необходимо реализовать новую систему сбора данных, обладающую следующими характеристиками:  низкая стоимость;  мобильность;  возможность получения географических данных;  возможность интеграции с существующими сетями общего назначения. 12
  • 13. 2. РАЗРАБОТКА СТРУКТУРЫ И АППАРАТНОГО ОБЕСПЕЧЕНИЯ СИСТЕМЫ 2.1. Плата TX-1C Для разработки данного проекта была выбрана макетная плата TX-1C, основанная на микроконтроллере STC89C52RC, имеющая в своем составе жидкокристаллический дисплей, клавиатуру, датчик температуры, ЦАП, АЦП и др. Ниже приведены причины, выбора платы TX-1C: 1) TX-1C была разработана на основе STC89C52RC. По сравнению с микроконтроллерами других компаний, микроконтроллеры от компании STC обладает большими набором ресурсов (1280 байт SRAM, 8-64Кбайт ПЗУ, 2-8 Кбайт ISP кода, встроенный 8-канальный 8-битовый АЦП, внутрикристальный EEPROM, сторожевой таймер, два указателя данных и т.д.). Кроме того, STC микроконтроллеры обладают низкой стоимостью, высокой скоростью и надежностью; 2) TX-1C поддерживает два способа загрузки программ (через USB и через последовательный порт); 3) питание от порта USB; 4) На плате размещены ADC0804, DAC0832, PDIUSBD12, датчик температуры - DS18B20; 5) TX-1602 поддерживает 1602 и 12864 интерфейсы; 6) большое количество технической документации. Внешний вид, структурная и принципиальная схемы представлены на рисунках 2.1, 2.2 и 2.3 соответственно. 13
  • 14. Рисунок 2. 1. Внешний вид TX-1C Рисунок 2.2. Структурная схема TX-1C 14
  • 16. 2.2. Модуль GPS В качестве GPS модуля был выбран TX-GPS модуль, который объединяет чип NEO-5Q Швейцарской компании U-Blox и резервный аккумулятор напряжением 3В для сохранения информации о текущем местоположении в условиях отсутствия питания. Также модуль TX-GPS поддерживает UART, USB, IIC, SPI. Причина выбора этого модуля в том, что он использует новейшую технологию KickStart компании U-Blox, которая обеспечивает самый быстрый сбор даже очень слабых спутниковых сигналов GPS. Более того, он поддерживает выходные контакты уровня TTL (TxD, RxD, Gnd и Vcc) которые могут быть подключены напрямую к программному последовательному порту микроконтроллера. Внешний вид и принципиальная схема представлены на рисунках 2.4 и 2.5. Рисунок 2.4. Внешний вид модуля GPS 16
  • 17. Рисунок 2.5. Принципиальная схема модуля GPS 2.3. Модуль GSM Модуль GSM основан на процессоре TC35i компании Siemens, который работает с сетями GSM 900 МГц и GSM 1800 МГц и имеет хорошие массо- габаритные показатели. Он специально разработан для задач телеметрии, телематики и телефонии, таких как: измерение, управление автопарком, охранные системы, POS-терминалы или торговые автоматы. Скорость передачи его последовательного порта регулируется и может быть установлена в пределах от 300b/s до 115kb/s. Внешний вид и принципиальная схема представлены на рисунках 2.6 и 2.7. 17
  • 18. Рисунок 2.6. Внешний вид модуля GSM Рисунок 2.7. Принципиальная схема модули GSM 18
  • 19. 2.4. Общая схема системы TX-1C макетная плата на базе микроконтроллера STC89C52RC поддерживает только один последовательный порт. Для того, чтобы получать информацию от модуля GPS и передавать обработанные данные через GSM сеть, необходимо наличие двух последовательных портов (второй создаётся программно). Рассмотрим два варианта реализации: первый это подключить GSM модуль к программному последовательному порту, а GPS модуль к оригинальному последовательному порту. Такой вариант требует программного последовательного порта, способного и передавать, и принимать данные. Второй вариант состоит в соединении GSM модуля с оригинальным последовательным портом, а GPS модуля – с программным, что требует программной поддедржки последовательного порта, способного только принимать данные. Система MarDDAS использует второй вариант, поскольку это облегчает написание программы. Внешний вид и структурная схема представлены на рисунке 2.8 и 2.9. Рисунок 2.8. Внешний вид MarDDAS 19
  • 20. Рисунок 2.9. Структурная схема MarDDAS Микроконтроллер получает данные о местоположении и местного времени системы посредством спутниковой системы навигации GPS. Затем на микроконтроллер поступает информация о температуре данной местности с помощью датчика температуры. Полученные данные отправляются на указанный в программе телефонный номер с использованием GSM-сети SMS-сообщением. 20
  • 21. 3. РАЗРАБОТКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ 3.1. Программная реализация дополнительного последовательного порта При использовании микроконтроллеров часто встречается ситуация, когда последовательный порт необходим как для сбора данных, так и для их отправки нескольким абонентам, что приводит к необходимости использования микроконтроллера с несколькими последовательными портами. В выбранном микроконтроллере он только один. Таким образом, второй последовательный порт должен быть реализован программно. Скорость передачи используемого чипа NEO-5Q 9600 бит/cек, он поддерживает последовательную передачу с 1 стартовым битом, 8 битами данных и 1 стоповым битом. Таким образом, длительность каждого бита составляет 1000ms 9600 =0.104ms . Для обнаружения стартового бита использован канал P3.2 (INT 0). Когда приходит стартовый бит, будет вызвано внешнее прерывание, что позволит внешней функции получить остальные биты. Схема получения одного байта программным последовательным портом показана ниже (Рисунок 3.1): 21
  • 22. Задержка 0.104ms Int 0 Определение входной переменной для получения одного байта и присваивание переменной значения 0 Инициализация и запуск Timer0, задержка 0.104ms Сдивиг входной переменной на 1 бит вправо, получение данных Уже получено 8 бит ? Получить стоп-бит N Y Завершить работу T0, Конец 22 Рисунок 3.1. Схема программы получения данных последовательным портом
  • 23. 3.2. Первичная настройка модуля GSM и AT команд Модули GSM обычно управляются с помощью AT команд. Список использованных AT-команд приведен в Приложении 1. Основная идея использования микроконтроллера для управления GSM модулем заключается в отправке серии AT команд от микроконтроллера на GSM модуль через последовательный порт на требуемой скорости передачи (скорость передачи данных между GSM модулем и микроконтроллером 9600 бит/c). Так как обычно на выполнение одной AT команды требуется больше времени, то, когда мы используем микроконтроллер для управления модулем GSM, необходимы задержки между каждой AT командой. Серия AT команд для управления GSM для отправки SMS отражается следующим образом: 1) сначала программа должна установить номер центра текстовых сообщений с помощью команды AT + CSCA=+ 79168999100 <CR>. В работе использовалась SIM-карта российской мобильной сети МТС, поэтому номер центра текстовых сообщений +79168999100. При использовании SIM-карты других компаний номер центра текстовых сообщений будет иным; 2) в системе, далее задаётся текстовый режим отправки SMS- сообщений. Должна быть отправлена команда: AT+CMGF=1 <CR> Установка параметров SMS в текстовом режиме: AT+CSMP=<fo>,<vp>,<pid>,<dcs> <CR>. 3) указывается набор символов терминального оборудования +CSCS. Используется априори система GSM: AT+CSCS=GSM; 4) далее производится отсылка сообщений: +CMGS 23
  • 24. Send_SMS Устаность адресс сервис центра для отправки SMS Установить текстовый режим SMS Выбор набора символов терминального оборудования Отсылка сообщений Конец Схема описанных выше шагов показана на рисунке 3.2. 24 Рисунок 3.2. Этапы отправки SMS
  • 25. 3.3. Анализ информации о местоположении GPS Для анализа информации о местоположении из полученных данных от GPS модуля, необходимо выделить последовательность байт с искомой информацией. Так как обмен информацией между модулем GPS и микроконтроллера происходит через программный последовательный порт (INT0 P3.2), то основное назначение программы обслуживания прерывания INT0 состоит в извлечении полезных байтов. Выходные данные модуля GPS нормируются в NMEA-01183 формате данных, который всегда начинается с байта "$" например, $GPRMC, $GPGGA, $GPGSV, $GPVTG, $GPGLL и так далее. Для получения информации о местоположении и времени, следует проанализировать $ GPRMC сообщения. Процесс приема $GPRMC сообщения состоит из двух частей: первая часть состоит в получении символа "$". Поскольку GPS сообщение всегда начинается с "$", и заканчивается "0ah", необходимо убедиться в том, что сообщение получено целиком. В программе обслуживания прерывания INT0, первое, что необходимо сделать, это проверить полученный байт. Если это "$", то мы устанавливаем битовый флаг и сообщаем микроконтроллеру, что процесс приема начался. Для следующих входящих байтов, микроконтроллер будет проверять, является ли он «0ah» (конец сообщения GPS). Если это так, то микроконтроллер остановит прерывания INT0 и приступит к анализу полученного сообщения. В этот момент мы подходим ко второй части приема $GPRMC сообщения. Если это $GPRMC сообщение, то пятый байт будет "C". Как только микроконтроллер будет уверен, что это $GPRMC сообщение, он приступит к анализу данных о местоположении и времени из этого сообщения, в противном случае микроконтроллер очистит буфер, изменит указатель на буфер и начнет новый процесс приема. 25
  • 26. gps_rmc_parse Получение информацию о времени и местоположении Является ли данное сообщение типа $GPRMC Конец Отобразить полученные данные на ЖКИ N Y Рассмотрим структуру $GPRMC сообщения, а затем выясним, как анализировать данные положения и времени из него. Ниже приведен формат сообщения: $GPRMC,hhmmss,status,latitude,N,longitude,E, spd,cog,ddmmyy,mv,mvE,mode*cs<CR><LF> Далее приведены 6 частей $GPRMC сообщения, необходимые для получения местоположения и времени: 1) Hhmmss - время UTC; 2) status: V - предупреждение навигационного приемника, status: A -данные действительны; 3) Latitude - долгота, градусы+минуты; 4) N - индикатор север/юг N=север или S=юг; 5) Longitude - широта, градусы+минуты; 6) E - индикатор положения - запад/восток, E=восток или W=запад. В соответствии со стандартом NMEA, широта и долгота выводятся в формате градусы, минуты и (десятичные) доли минут. Иногда составляющие должны быть преобразованы. Другими словами, если приемник GPS сообщает 4717.112671 северной широты и 00833.914843 восточной долготы, это:  широта 47° 17’, 6.76026’’;  долгота 8°, 33’, 54.89058’’. В $GPRMC сообщении, каждая область делится символом ",", например, если мы хотим получить ччммсс, мы должны получить часть между первой "," и второй ",". Для достижения этой цели, была написана ассемблерная функция get_comma_string. Схема алгоритма обнаружения и анализа $GPRMC сообщения показана на рисунке 3.3. 26
  • 27. 3.4. Сбор данных при помощи датчика В распределенной системе сбора данных существуют две основных функции: обмен информацией и сбор данных (с помощью датчика сетей). В разрабатываемом проекте используется один датчик температуры DS18B20, который интегрирован на макетной плате TX-1C. В отличие от других датчиков температуры, DS18B20 поддерживает 1-Wire протокол, это означает, что DS18B20 требуется всего одну линию для двунаправленной связи с микроконтроллером. 27 Рисунок 3.3. Схема программы обнаружения и анализа NMEA-сообщения
  • 28. Можно выявить три основных шага для получения информации о температуре от датчика: 1) инициализация: Все операции на шине 1-Wire начинаются с импульса сброса, который передается по ведущей шине, с последующей передачей импульса по ведомой шине; 2) запись данных в DS18B20 Поскольку в системе MarDDAS микроконтроллер соединяется с одним DS18B20, то микроконтроллеру не нужно посылать команды через вывод данных DS18B20 для чтения и сопоставления специального кода ROM; 3) чтение данных из DS18B20 Наиболее важной частью управления датчиком является считывание обработанных данных с одного или нескольких датчиков. Схема чтения показателей датчика DS18B20 показана на рисунке 3.4. 28 anal_temper Инициализация Запись даныых в датчик Чтение температуры с датчика end Рисунок 3.4. Получение температурных данных с датчика
  • 29. 3.5. Общая структура программы MarDDAS На рисунке 3.5 показана схема работы программы, реализуемом в данной работе. В начале программы просходит инициализация для всех используемых составляющих проекта. Затем ожидается получение действительной информации со спутника через программный последовательный порт. Если информация является действительной, то будет происходить анализ полученного сообщения. После анализа сообщения будет получать информацию о местоположении системы и времени. Затем будет происходить анализ температуры в заданной местности. Если система получит команду для отправки сообщения, данные будут отправлены в виду SMS-сообщения: местоположение и температура. 29
  • 30. 30 Рисунок 3.5. Общий вид программы MarDDAS
  • 31. 4. ИССЛЕДОВАНИЯ РАЗРАБОТАННОЙ РАБОТЫ 4.1. Тестирование программного последовательного порта Перед подключением выводных контактов TTL GPS модуля к микроконтроллеру P3.2 (INT 0) мы должны проверить, работает ли наша программа обслуживания прерывания. Для этого необходимо установить соединение между ПК и микроконтроллером. Для осуществления подключения используется TX конвектор (RS232 TTL, USB  RS232, USB  TTL), его внешний вид приведен ниже на рисунке 4.1. Рисунок 4.6. Внешний вид модуля TX-convert Схема подключения показана ниже на рисунке 4.2. Рисунок 4.7.Схема подключения Скриншот показано на рисунке 4.3. 31
  • 32. Рисунок 4.3.Схема программы серийного помощника 4.2. Тестирование модуля GSM Поскольку GSM модуль соединяется с микроконтроллером непосредственно через последовательный порт, то легко проверить его работоспособность. Необходимо подключить GSM модуль к ПК через последовательный порт (с помощью TX конвектор), а затем отправить на него AT команды. В этом случае, GSM модуль производит отправку SMS ("hello world") на указанный номер мобильного телефона. Результат тестирования показан ниже: Рисунок 4.4. Сообщение из GSM модуля 32
  • 33. 4.3. Тестирование датчика температуры DS18B20 Для тестирования датчика температуры DS18B20, было проведено два рода экспериментов: 1) исследование показаний в комнатной температуре (Рисунок 4.5); 2) исследование показаний в условиях контакта c горячей чашкой (Рисунок 4.6). Результаты экспериментов представлены ниже. Рисунок 4.5. Исследование показаний в комнатной температуре Рисунок 4.6. Исследование показаний в условиях контакта c горячей чашкой 33
  • 34. 4.4. Тестирование модуля GPS Тестирование модуля GPS было проведено в программе u-center 5.08. В ходе тестирования GPS модуля, производилось некоторое движение на достаточно большое расстояние. Полученные данные были экспортированы в ПО Google Earth (рисунок 4.7). Рисунок 4.7. Динамическое движение Полученные данные с высокой точностью описывают проделанный путь. 34
  • 35. 4.5. Комплексные испытания системы Система была запущенна на выполнение, полученные результаты подробно отображаются на ЖК-дисплее TX-1C. (см. рис. 4.8-4.12) Рисунок 4.8. Процесс инициализации 35
  • 36. Рисунок 4.9. Данные времени в формате UTC Рисунок 4.8. Данные местоположения 36
  • 37. Рисунок 4.9. Температурная информация Рисунок 4.10. SMS сообщение 37
  • 38. 4.6. Анализ точности GPS является спутниковой навигационной системой. В точках рядом с землей спутниковые сигналы отражаются от высотных зданий и других высот (многолучевой эффект). Таким образом, GPS-устройство в автомобиле не может производить точное позиционирование из-за больших задержек, которые вызывают непрямые пути распространения спутниковых сигналов (радиоволн). Другие факторы, влияющие на точность определения местоположения, включают в себя: спутниковую геометрию, сдвиги спутниковых орбит, ошибки спутниковых часов, различные явления в тропосфере и ионосфере и ошибки в расчетах. Карта отклонений очень близка к реальной ситуации, которая показана в разделе 4.4.2(рисунок 4.7). Минимальное отклонение от реального положения составляет для широты – 0.000045, для долготы – 0.000062. Рисунок 4.13. Карта отклонений динамического позиционирования 38
  • 39. ЗАКЛЮЧЕНИЕ Система MarDDAS (собственная разработка – Martin’s Distributed Data Acquisition System) предоставляет возможность точно определить местоположение транспортного средства а так же получить основные характеристики. MarDDAS относится к категории систем мониторинга траектории, эти системы реализованы с использованием нескольких гибридных технологий, которые включают в себя: беспроводную связь, географическую локализацию и встроенные устройства наблюдения. Транспортные системы слежения предназначены для оказания помощи корпорациям с большим количеством автомобилей. Данные системы позволяют минимизировать затраты и сложность работы обслуживающего персонала. Кроме того, системы имеют и маршрутное назначение - можно рассчитать маршрут на основе текущего местоположения автомобиля. Таким образом, использование транспортных систем слежения имеет важное значение для крупных предприятий для удовлетворения различных требований клиентов и повышения производительности. MarDDAS является средством, подобным транспортной системе слежения. По сравнению со штатными транспортными системами слежения, MarDDAS имеет свои преимущества. Благодаря добавлению сети датчиков в систему, MarDDAS позволяет осуществлять не только поиск текущего местоположения объекта, но и сбор информации об окружающей среде текущего местоположения. Это существенно расширяет область применения системы. Приведем примеры применения разработанной системы:  На основании концепции системы распределенного сбора данных и «Интернете вещей», предположим, что есть центральный компьютер в 39
  • 40. городе Санкт-Петербурге, основной целью которого является анализ входящей экологической информации в различных точках города. Информационный центр посылает 10 автомобилей, каждый из которых оснащен MarDDAS системой. Эти 10 автомобилей постоянно получают экологическую информацию (в настоящее время в MarDDAS интегрирован только датчик температуры, так что экологической информацией является температура, при необходимости, в перспективе будут добавлены иные датчики) каждые 100 метров. После того, как память МК заполнена полученной информацией, MarDDAS пошлет всю информацию (местоположение, время и температуру) на центральный компьютер для обработки. При условии наличия достаточного количества автомобилей и достаточной вычислительной мощности центрального компьютера, возможно контролировать экологическую ситуацию целого города, даже всей страны. В этом случае, вследствие первичной стоимости, использование GSM-сети (или GPRS) для обмена данными, вероятно, не является приемлемым.  Россия богата нефтью и природным газом. Транспортировка этих природных ресурсов из одного места в другое происходит по трубопроводам. Поскольку транспортировка трубопроводами очень долгая и иногда проходит через небезопасные экологические зоны, а также в силу отсутствия надлежащих ремонтных работ, трубопроводы зачастую подвержены повреждениям. Такие поломки очень трудно обнаружить. С помощью MarDDAS, можно просто добавить несколько датчиков для обнаружения утечек нефти или газа. MarDDAS будет записывать все позиции, где трубопровод поврежден. По завершению сбора информации система будет отправлять собранные данные в центр управления через GSM сеть.  Так же, как и в предыдущем примере, обслуживание железных дорог является большой проблемой. Поскольку они такие же протяженные, как и газовые/нефтяные трубопроводы. Обычный способ обнаружения 40
  • 41. повреждений полотна недостаточно эффективен. С помощью датчиков системы MarDDAS можно получить необходимые данные. Все позиции, где нарушено расстояние между рельсами, будут записаны в MarDDAS и отправлены в центр управления через GSM сеть. Экспериментальные результаты показывают, что разработанная система работает стабильно и надежно. Реализованная технология может быть применена в различных областях, например, в экологическом мониторинге. Однако, проблемы сетей передачи данных имеют определенное влияние на характер реализации работы системы в реальном времени. Например, не исключены задержки получения или отправки SMS-сообщений, в особенности при высокой загруженности мобильной сети или в районе с низким качеством приема сигнала. Для достижения более надежной связи, возможно создание специального канала для передачи SMS с поставщиком GSM. 41
  • 42. СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ Васильев А.Е. Микроконтроллеры: разработка встраиваемых приложений.– СПб.: БХВ-Петербург, 2008.– 304 с 张义和,陈敌北. 例说 8051(第三版), 2009. – 336с SIEMENS. TC35i Siemens Cellular Engine: AT Command Set, 2003. – 257 с u-blox 5 Receiver Description including Protocol Specification Public Release, 2009. – 257 с 42
  • 43. ПРИЛОЖЕНИЕ 1. Понятие АТ команды АТ команды являются набором командного языка или инструкций, которые направляются в сотовый модуль для выполнения различных действий. Эти команды или инструкции могут быть отправлены через USB, последовательный или другой интерфейс к сотовому модулю от основного приложения контроллера. Установка параметров SMS в текстовом режиме: AT+CSMP=<fo>,<vp>,<pid>,<dcs> <CR>. Таблица 0.1.Состав байта <fo> b7 b6 b5 b4 b3 b2 b1 b0 H P HDH I SR R VPF R D VPF  HP: не используется в текстовом режиме;  UDHI: заголовок для пользовательских данных, b6=1 если начало поля UserData (пользовательские данные) содержит заголовок в дополнение к сообщению. Данная опция не поддерживается командой +CSMP, но может быть использована в режиме PDU (+CMGS);  SRR: запрос на получение отчета о статусе, b5=1 если отчет о статусе запрашивается.  VPF: формат сроки действия; b4=0 и b3=0 → поле <vp> отсутствует; b4=1 и b3=0 → поле <vp> присутствует в соответствующем формате; 43
  • 44. другие форматы (абсолютный и расширенный) не поддерживаются;  RD: отклонять копии сообщений (b2=1);  <mr> и <da>, также как и предыдущее сообщение от того же <oa>;  MTI: индикатор типа сообщения; b1=0 и b0=0 → SMS-DELIVER (от SC к MS); b1=0 и b0=1 → SMS-SUBMIT (от MS к SC);  в текстовом режиме <vp> кодируется только в «относительный» формат;  значение по умолчанию равно 167 (24 часа). Это значит, что один байт может описывать разные значения;  <pid> – используется для определения используемого протокола высшего уровня либо отражает взаимодействие с определенным типом устройств связи. Например, 0x22 для группы 3 телефакса, 0х24 для голосовых вызовов, 0х25 для ERMES (European Radio Messaging System);  <dcs> – используется для определения способа кодировки информации. Сжатый текст не поддерживается. Поддерживаются только алфавит GSM установленный по умолчанию , формат 8-битных данных и алфавит UCS2;  назначить период действия для SMS-сообщений (один день) AT+CSMP=17, 167, 0, 0. Указывается набор символов терминального оборудования +CSCS. Данная команда сообщает мобильному оборудованию, какой набор символов используется терминальным оборудованием. Мобильное оборудование может преобразовывать каждый символ введенных или 44
  • 45. отображаемых строк. Эта функция используется для отправки, чтения или написания коротких сообщений. Синтаксис команды: AT+CSCS=<набор символов> <набор символов> GSM – алфавит GSM по умолчанию. PCCP437 – кодовый набора символов PC страница 437. CUSTOM – пользовательский набор символов. HEX – шестнадцатеричный режим. Набор символов не используется; пользователь может считывать или записывать шестнадцатеричные значения. Отсылка сообщений: +CMGS Поле <address> – номер, на который посылается сообщение. Для отправки сообщения используется комбинация символов <ctrl-Z> (кодировка ASCII 26). Текст может содержать любые символы, кроме <ctrl-Z> и <ESC> (ASCII 27). Символ <ESC> отменяет отправку сообщения. ПРИЛОЖЕНИЕ 2. Структура проекта 45
  • 46. 46
  • 47. ПРИЛОЖЕНИЕ 3. Программный код разработанной системы Листинг 1. main.asm extrn code(int0_inter) extrn code(project_init) extrn code(gps_rmc_parse) extrn code(key_check) extrn code(send_sms) extrn code(waiting_commands) key_vail bit 20h.0 rev_stop bit 20h.4 ;1 tmp equ 48h org 0000h sjmp main org 0003h lcall int0_inter reti main: lcall project_init xxx: jnb rev_stop,$ clr rev_stop clr ex0 lcall key_check lcall gps_rmc_parse lcall key_check jnb key_vail,xxx1 clr key_vail lcall send_sms 47
  • 48. xxx1: setb ex0 sjmp xxx DEL1S:MOV R7,#10 D1: MOV R6,#200 D2: MOV R5,#250 DJNZ R5,$ DJNZ R6,D2 DJNZ R7,D1 RET end ПРИЛОЖЕНИЕ 3. Программный код разработанной системы Листинг 2. serial_operation.asm public uart_init 48
  • 49. public int0_inter public serial_send ss2 segment code rseg ss2 rev_counter equ 43h counter equ 44h output equ 45h rev_buffer equ 46h newRXD bit p3.2 rev_start bit 20h.3 ;0 rev_stop bit 20h.4 ;1 ;-------------------------------------------------------------- uart_init: mov scon,#40h ;it was 50h, we need clr ren, so we ; will not be influenced by receiving ;data from GSM module mov tmod,#22h mov tl1,#0fdh mov th1,#0fdh mov ie,#91h clr tf0 setb it0 setb tr1 ret ;-------------------------------------------------------------- ;-------------------------------------------------------------- int0_inter: clr ex0 push 0 push acc push dpl push dph ;mov r0,rev_buffer mov r0,rev_buffer ;;; call read_byte mov a,output 49
  • 50. cjne a,#24h, check0_int0_inter ;24h='$' setb rev_start clr rev_stop check0_int0_inter: jnb rev_start,exit_int0_inter ;mov a,output mov @r0,a inc rev_buffer ;;*** inc r0 cjne a,#0ah,exit_int0_inter clr rev_start setb rev_stop mov rev_buffer,#50h ;;;;;;;;;;; reverse value of rev_buffer ;;reti ;;;;;;; exit_int0_inter: clr ie0 pop dph pop dpl pop acc pop 0 setb ex0 ret ;-------------------------------------------------------------- ;-------------------------------------------------------------- read_byte: mov output,#00h mov counter,#08h setb tr0 mov th0,#0a0h mov tl0,#0a0h clr tf0 call wait_tf0 next0_read_byte: 50
  • 51. mov a,output clr c rrc a ;rr a ;;;; mov output,a jnb newRXD,next1_read_byte mov a,output orl a,#80h mov output,a ;;;;;; next1_read_byte: call wait_tf0 djnz counter,next0_read_byte clr tr0 ret ;-------------------------------------------------------------- ;----------------------------------------------------- wait_tf0: jnb tf0,$ clr tf0 ret ;----------------------------------------------------- ;----------------------------------------------------- ;Name of Subprogram: serial ;Function:subprogram for supporting function send ;input:a ;output:None ;Effects: sbuf,ti ;----------------------------------------------------- serial_send: clr es mov sbuf,a jnb ti,$ clr ti 51
  • 52. setb es ret ;----------------------------------------------------- end ПРИЛОЖЕНИЕ 3. Программный код разработанной системы 52
  • 53. Листинг 3. proj_init.asm public project_init public waiting_commands ss0 segment code rseg ss0 cxpos equ 21h cypos equ 22h str_loca_sms equ 33h comma_res_start equ 37h output equ 45h rev_buffer equ 46h key_vail bit 20h.0 rev_start bit 20h.3 ;0 rev_stop bit 20h.4 ;1 time_or_locat bit 20h.5 lati_or_longti bit 20h.7 ;---------------------------------------------------------------------- ;External functions for LCD operations extrn code(lcd_init) extrn code(write_com) extrn code(write_data) extrn code(delay3ms) extrn code(put_str) extrn code(uart_init) ;---------------------------------------------------------------------- dula bit p2.6 wela bit p2.7 project_init: call environment_init 53
  • 54. call lcd_init call info_display call uart_init ret environment_init: clr dula clr wela clr key_vail clr rev_start clr rev_stop clr lati_or_longti clr time_or_locat mov output,#00h mov rev_buffer,#50h ;keep buffer starts from 50h mov comma_res_start,#0a0h ;the beginning address for keeping result mov str_loca_sms,#0e0h ;the beginning address for saving location for sms sending ret info_display: mov cxpos,#00h mov cypos,#00h mov dptr,#table0 call put_str mov cxpos,#00h mov cypos,#01h mov dptr,#table1 call put_str ret waiting_commands: mov cxpos,#00h mov cypos,#00h 54
  • 55. mov dptr,#table9 call put_str mov cxpos,#00h mov cypos,#01h mov dptr,#table10 call put_str ret table0: db "Init...",00h table1: db "BY ZHANG JINGYI",00h table9: db "Waiting commands",00h table10: db "you have 5s...",00h end 55
  • 56. ПРИЛОЖЕНИЕ 3. Программный код разработанной системы Листинг 4. lcd.asm public lcd_init public write_com public write_data public put_str public delay3ms ss1 segment code rseg ss1 lcdrs bit p3.5 lcdrw bit p2.1 lcden bit p3.4 cxpos equ 21h cypos equ 22h ;------------------------------------------------- ;Name of Subprogram: lcd_init ;Function:Initialize LCD control unit ;input:None ;output:None ;Effects: The values of R0 and ACC ;------------------------------------------------- lcd_init: mov a,#01h call write_com call delay3ms mov a,#38h call write_com call delay3ms mov a,#0fh call write_com call delay3ms 56
  • 57. mov a,#06h call write_com call delay3ms mov a,#80h call write_com call delay3ms ret ;-------------------------------------------------- ;------------------------------------------------- ;Name of Subprogram: write_com ;Function:Send command to the control unit of LCD ;input:A ;output:None ;Effects: The value of R0 ;------------------------------------------------- write_com: clr lcdrs clr lcdrw mov p0,a call delay3ms setb lcden call delay3ms clr lcden ret ;------------------------------------------------- ;------------------------------------------------- ;Name of Subprogram: write_data ;Function:Send data to the control unit of LCD ;input:A ;output:None ;Effects: The value of R0 ;------------------------------------------------- 57
  • 58. write_data: setb lcdrs clr lcdrw mov p0,a call delay3ms setb lcden call delay3ms clr lcden ret ;------------------------------------------------- ;------------------------------------------------- ;Name of Subprogram: lcd_read ;Function:Read data from the control unit of LCD ;input:None ;output:A ;Effects: The value of R0 ;------------------------------------------------- lcd_read: call lcd_wait_idle mov p0,#0ffh setb lcdrs setb lcdrw setb lcden nop nop mov a,p0 clr lcden ret ;------------------------------------------------- ;------------------------------------------------- ;Name of Subprogram: lcd_wait_idle ;Function:Busy check of the LCD control unit ;input:None ;output:None ;Effects: The value of R0 ;------------------------------------------------- 58
  • 59. lcd_wait_idle: push acc ;Generally,before ;reading and writing ;operations, the 7 bit ;of SW of LCD control ;unit must be checked. ;only when d7=0,the op ;eration of reading and ;writing would be accepted. mov p0,#0ffh clr lcdrs setb lcdrw setb lcden mov r0,#20 wtd_pa: ;D7=0 means that LCD control nop ;unit is idle, so quit from nop ;the busy check. jnb p0.7,wtd_lax djnz r0,wtd_pa ;D7=1 menas that LCD control nop ;unit is busy,so keep checking. nop ;After 100us, if D7 still equals ;to 1 means that the LCD control ;unit works uncorrectlly.Also ;quit from the busy check wtd_lax: clr lcden pop acc ret ;---------------------------------------------------- ;----------------------------------------------------- ;Name of Subprogram: put_str ;Function:At (cxpos,cypos) write string ;input:Dptr ;output:None ;Effects: The values of R0,ACC,DPTR 59
  • 60. ;----------------------------------------------------- put_str: clr a movc a,@a+dptr jz psr_lax ;0 means the end of the string call put_char ;write one char call char_cursor_next ;move the pozision ;to the next inc dptr ;move the string point to ;the next jmp put_str ;re-read string psr_lax: ret ;------------------------------------------------------ ;----------------------------------------------------- ;Name of Subprogram: put_char ;Function:At (cxpos,cypos) write char ;input:None ;output:None ;Effects: None ;----------------------------------------------------- put_char: call char_lcd_pos call write_data ret ;----------------------------------------------------- ;----------------------------------------------------- ;Name of Subprogram: char_lcd_pos ;Function:Set the DDRAM address of pozision(cxpos,cypos) ;input:None ;output:None ;Effects: None ;----------------------------------------------------- 60
  • 61. char_lcd_pos: push acc anl cxpos,#0fh anl cypos,#01h mov a,cypos cjne a,#00h,lps_lay mov a,cxpos jmp lps_lax lps_lay: mov a,cxpos add a,#40h lps_lax: orl a,#80h call write_com pop acc ret ;------------------------------------------------------ ;----------------------------------------------------- ;Name of Subprogram: char_cursor_next ;Function:Set the char to the next avilable pozision ;input:None ;output:None ;Effects: The value of R0 ;----------------------------------------------------- char_cursor_next: inc cxpos anl cxpos,#0fh mov r0,cxpos cjne r0,#00h,csn_lax inc cypos anl cypos,#01h csn_lax: ret ;---------------------------------------------------- 61
  • 62. ;------------------------------------------------- ;Name of Subprogram: delay3ms ;Function:3 ms delay ;input:None ;output:None ;Effects: The values of R1 and R2 ;------------------------------------------------- delay3ms: push 1 mov r1,#15 dl3_pa: mov r2,#100 djnz r2,$ djnz r1,dl3_pa pop 1 ret ;------------------------------------------------ end 62
  • 63. ПРИЛОЖЕНИЕ 3. Программный код разработанной системы Листинг 5. gps_operation.asm public gps_rmc_parse ss3 segment code rseg ss3 extrn code(write_com) ;;; extrn code(write_data) ;;; extrn code(put_str) extrn code(send_sms) extrn code(status_check) extrn code(get_comma_string) extrn code(get_second_mul) extrn code(anal_temper) time_or_locat bit 20h.5 gps_dat_vaild bit 20h.6 lati_or_longti bit 20h.7 one_lati equ 40h mten_lati equ 41h mone_lati equ 42h cxpos equ 21h cypos equ 22h str_loca_sms equ 33h comma_start equ 35h comma_content_size equ 36h comma_res_start equ 37h which_comma equ 38h rev_buffer equ 46h tmp equ 48h ;--------------------------------------------------------------------------- gps_rmc_parse: push 1 63
  • 64. mov a,55h ;$GPRMC, MCU saves 'C' in 55h cjne a,#43h,exit_gps_rmc_parse ;43h='C' in asscii mov a,#01h call write_com checking: call status_check jnb gps_dat_vaild,warning_gps_rmc_parse clr gps_dat_vaild jnb time_or_locat,disp_time clr time_or_locat call get_location lcall DEL1S lcall DEL1S lcall DEL1S lcall anal_temper lcall DEL1S lcall DEL1S lcall DEL1S ;;lcall send_sms ;;;;; sjmp exit_gps_rmc_parse disp_time: call get_time setb time_or_locat lcall DEL1S lcall DEL1S lcall DEL1S sjmp exit_gps_rmc_parse warning_gps_rmc_parse: 64
  • 65. mov cxpos,#00h mov cypos,#00h mov dptr,#table2 call put_str mov cxpos,#00h mov cypos,#01h mov dptr,#table3 call put_str exit_gps_rmc_parse: pop 1 ret ;------------------------------------------------------------------------ get_location: mov a,#01h lcall write_com call get_latitude call get_longitude ret ;------------------------------------------------------------------------ ;------------------------------------------------------------------------ get_time: push 1 mov a,#01h call write_com mov cxpos,#00h mov cypos,#00h mov dptr,#table4 call put_str mov a,#0c0h call write_com mov comma_start, rev_buffer mov which_comma,#01h 65
  • 66. mov comma_content_size,#00h call get_comma_string mov r1,comma_res_start hour_get_time: mov a,@r1 inc r1 call write_data mov a,@r1 inc r1 call write_data mov a,#68h call write_data ;68h='h' minute_get_time: mov a,@r1 inc r1 call write_data mov a,@r1 inc r1 call write_data mov a,#6dh call write_data ;6dh='m' second_get_time: mov a,@r1 inc r1 call write_data mov a,@r1 inc r1 call write_data mov a,#73h call write_data ;73h='m' exit_get_time: pop 1 ret ;------------------------------------------------------------------------ 66
  • 67. /* ;--------------------------------------------------------------------- ;Name: get_latitude ;input: None ;output: Tht output will be like like (ten_lati)(one_lati).(mten_lati) (mone_lati).(sten_lati)(sone_lati) ;effect: r1 get_latitude: push 1 mov comma_start, rev_buffer mov which_comma,#03h mov comma_content_size,#00h call get_comma_string mov which_comma,#04h call display_lati_or_longti pop 1 ret ;---------------------------------------------------------------------------- --- ;--------------------------------------------------------------------- ;input: None ;output: Tht output will be like like (ten_lati)(one_lati).(mten_lati) (mone_lati).(sten_lati)(sone_lati) ;effect: r1 get_longitude: push 1 mov comma_start, rev_buffer 67
  • 68. mov which_comma,#05h mov comma_content_size,#00h call get_comma_string mov which_comma,#06h mov a,#0c0h call write_com call display_lati_or_longti pop 1 ret ;---------------------------------------------------------------------------- ;---------------------------------------------------------------------------- ;Name: display_lati_or_longti ;input: dptr,which_comma ;effect: r7 display_lati_or_longti: push 1 push 0 ;mov r0,str_loca_sms mov r7,#00h mov r1,comma_res_start jb lati_or_longti,display_increase setb lati_or_longti mov r0,str_loca_sms sjmp loop2_display_lati_or_longti display_increase: inc r1 mov r0,str_loca_sms mov str_loca_sms,#0e0h ;get back the init value clr lati_or_longti 68
  • 69. loop2_display_lati_or_longti: mov a,@r1 movx @r0,a ;; inc r0 ;; call write_data inc r1 inc r7 cjne r7,#02h,loop2_display_lati_or_longti mov a,#64h movx @r0,a ;; inc r0 ;; call write_data ;64h=d(degree) loop3_display_lati_or_longti: mov a,@r1 movx @r0,a ;; inc r0 ;; call write_data inc r1 inc r7 cjne r7,#04h,loop3_display_lati_or_longti mov a,#6dh ;6d=m(Minute) movx @r0,a ;; inc r0 ;; call write_data loop4_display_lati_or_longti: inc r1 ;for skipping the symbol '.' call get_second_mul mov a,r2 movx @r0,a ;; inc r0 ;; call write_data mov a,r3 69
  • 70. movx @r0,a ;; inc r0 ;; call write_data mov a,#2eh movx @r0,a ;; inc r0 ;; call write_data ;2eh='.' mov a,r4 movx @r0,a ;; inc r0 ;; call write_data mov a,#73h ;73h=s(Second) movx @r0,a ;; inc r0 ;; call write_data mov comma_start, rev_buffer mov comma_content_size,#00h call get_comma_string mov r1,comma_res_start mov a,@r1 movx @r0,a ;; inc r0 ;; call write_data jnb lati_or_longti,exit_display_lati_or_longti mov a,#0ah movx @r0,a ;we need use movx inc r0 mov str_loca_sms,r0 exit_display_lati_or_longti: pop 0 pop 1 70
  • 71. ret ;--------------------------------------------------------------------------- DEL1S:MOV R7,#10 D1: MOV R6,#200 D2: MOV R5,#250 DJNZ R5,$ DJNZ R6,D2 DJNZ R7,D1 RET ;--------------------------------------------------------------------------- table2: db "Searching...",00h table3: db "Waiting response",00h table4: db "Current time:",00h end ПРИЛОЖЕНИЕ 3. Программный код разработанной системы Листинг 6. gps_string_anal.asm public status_check public get_comma_string ss4 segment code rseg ss4 time_or_locat bit 20h.5 gps_dat_vaild bit 20h.6 lati_or_longti bit 20h.7 one_lati equ 40h 71
  • 72. mten_lati equ 41h mone_lati equ 42h cxpos equ 21h cypos equ 22h str_loca_sms equ 33h comma_start equ 35h comma_content_size equ 36h comma_res_start equ 37h which_comma equ 38h rev_buffer equ 46h tmp equ 48h ;------------------------------------------------------------------------ status_check: push 1 mov comma_start, rev_buffer mov which_comma,#02h mov comma_res_start,#0a0h mov comma_content_size,#00h call get_comma_string mov r1,comma_res_start mov a,@r1 cjne a,#41h,exit_status_check ;41h=A means data valid setb gps_dat_vaild exit_status_check: pop 1 ret ;------------------------------------------------------------------------ ;--------------------------------------------------------------------- ;input: which_comma- String gets from which comma ; comma_start-pointer to the beginning of a string ; comma_content_size=0 72
  • 73. ;output:comma_content_size-size of the content between two commas ; comma_res_start the beginning address for keeping result get_comma_string: push 1 push 0 mov r0,comma_res_start mov r2,which_comma mov r1,comma_start loop_get_comma_str: mov a,@r1 cjne a,#2ch,next0_get_comma_str ;2ch equals to ',' djnz r2,next1_get_comma_str get_num_sat: inc r1 mov a,@r1 cjne a,#2ch,next2_get_comma_str ;2ch equals to ',' sjmp exit_get_comma_str next0_get_comma_str: inc r1 cjne r1,#9fh,loop_get_comma_str ;the end of the string 9fh (address) next1_get_comma_str: inc r1 sjmp loop_get_comma_str next2_get_comma_str: mov @r0,a inc r0 inc comma_content_size sjmp get_num_sat exit_get_comma_str: pop 0 pop 1 73
  • 74. ret ;---------------------------------------------------------------------- end ПРИЛОЖЕНИЕ 3. Программный код разработанной системы Листинг 7. gps_info_calcu.asm public get_second_mul ss5 segment code rseg ss5 tmp equ 48h ;--------------------------------------------------------------------------- ;input: a(keeps) ;output: R2R3.R4s 74
  • 75. get_second_mul: mov a,@r1 inc r1 subb a,#30h swap a mov tmp,a mov a,@r1 subb a,#30h add a,tmp call bcd_to_hex mov b,#06h mul ab mov r6,b mov r7,a call hex2_to_bcd mov a,r4 add a,#30h mov r2,a ;write back to r2 mov a,r5 anl a,#0f0h swap a add a,#30h mov r3,a ;write back to r3 mov a,r5 anl a,#0fh add a,#30h mov r4,a ;write back to r4 ret 75
  • 76. ;------------------------- ;input:a ;output:a bcd_to_hex: mov b,#10H div ab mov r4,b mov b,#10 mul ab add a,r4 ret ;------------------------- ;----------------------------------------- ;input: R6,R7 ;output: R3,R4,R5,change register group hex2_to_bcd: clr a mov r3,a mov r4,a mov r5,a mov r2,#10h loop0_hex2_to_bcd: mov a,r7 rlc a mov r7,a mov a,r6 rlc a mov r6,a mov a,r5 addc a,r5 da a mov r5,a mov a,r4 addc a,r4 da a 76
  • 77. mov r4,a mov a,r3 addc a,r3 mov r3,a djnz r2,loop0_hex2_to_bcd exit_loop0_hex2_to_bcd: ret ;--------------------------------------------- end ПРИЛОЖЕНИЕ 3. Программный код разработанной системы Листинг 8. sms.asm public send_sms ss6 segment code rseg ss6 extrn code(serial_send) str_loca_sms equ 33h 77
  • 78. counter1 equ 49h bai_c equ 3dh sh_c equ 3eh g_c equ 3fh ;------------------------------------------------- ;Name of Subprogram: delay3ms ;Function:3 ms delay ;input:None ;output:None ;Effects: The values of R1 and R2 ;------------------------------------------------- delay3ms: mov r1,#15 dl3_pa: mov r2,#100 djnz r2,$ djnz r1,dl3_pa ret ;------------------------------------------------ ;------------------------------------------------------- ;Name of Subprogram: delay105ms ;Function:Delay 105 ms ;input: R3 ;output: None ;Effects: R1,R2,R3 ;------------------------------------------------------- delay105ms: mov r3,#23h cycle4: call delay3ms djnz r3,cycle4 78
  • 79. ret ;------------------------------------------------------- send_sms: mov counter1,#05h mov dptr,#table13 lcall send lcall delay105ms lcall delay105ms lcall delay105ms mov counter1,#0bh mov dptr,#table14 lcall send lcall delay105ms lcall delay105ms lcall delay105ms mov counter1,#0dh mov dptr,#table15 lcall send lcall delay105ms lcall delay105ms lcall delay105ms mov counter1,#14h mov dptr,#table16 lcall send lcall delay105ms lcall delay105ms lcall delay105ms mov counter1,#13h mov dptr,#table17 79
  • 80. lcall send mov counter1,#02h mov dptr,#table19 lcall send lcall delay105ms lcall delay105ms lcall delay105ms mov counter1,#0bh mov dptr,#table7 lcall send mov counter1,#19h call send_location call send_temper mov a,#1ah lcall serial_send lcall delay105ms lcall delay105ms lcall delay105ms ret ;----------------------------------------------------- ;----------------------------------------------------- send_location: push 0 push acc mov r0,str_loca_sms loop0_send_location: movx a,@r0 inc r0 80
  • 81. call serial_send call delay3ms djnz counter1,loop0_send_location exit_send_location: pop acc pop 0 ret ;----------------------------------------------------- ;----------------------------------------------------- send_temper: push acc mov counter1,#09h mov dptr,#table6 lcall send mov a,bai_c call serial_send call delay3ms mov a,sh_c call serial_send call delay3ms mov a,#2eh ;2e='.' call serial_send call delay3ms mov a,g_c call serial_send call delay3ms mov a,#43h call serial_send call delay3ms 81
  • 82. exit_send_temper: pop acc ret ;----------------------------------------------------- ;----------------------------------------------------- ;Name of Subprogram: send ;Function:send string to serial port ;input:DPTR,counter ;output:None ;Effects: R1,R2 ;----------------------------------------------------- send: cycle7: mov a,#00h movc a,@a+dptr lcall serial_send lcall delay3ms inc dptr djnz counter1,cycle7 ret ;----------------------------------------------------- table6: db 0ah,"Local T:",00h table7: db 0ah,"Location:",0ah table13: db 0ah,"AT",0dh,0ah table14: db "AT+CMGF=1",0dh,0ah table15: db "AT+CSCS=GSM",0dh,0ah table16: db "AT+CSMP=17,167,0,0",0dh,0ah table17: db "AT+CMGS=89030944159" table18: db "Hello World!",1ah 82
  • 83. table19: db 0dh,0ah end ПРИЛОЖЕНИЕ 3. Программный код разработанной системы Листинг 9. Sensor_temp.asm public anal_temper ss7 segment code rseg ss7 extrn code(write_com) ;;; extrn code(write_data) ;;; extrn code(put_str) cxpos equ 21h cypos equ 22h temper_l equ 3bh temper_h equ 3ah temper_d equ 3ch temper_num equ 4ah flag1 bit 20h.1 83
  • 84. dq bit p2.2 bai_c equ 3dh sh_c equ 3eh g_c equ 3fh anal_temper: push 0 mov a,#01h lcall write_com mov cxpos,#00h mov cypos,#00h mov dptr,#table5 lcall put_str lcall get_temper lcall temper_cov mov a,temper_num anl a,#0f0h swap a add a,#30h mov bai_C,a lcall write_data mov a,temper_num anl a,#0fh add a,#30h mov sh_c,a lcall write_data mov a,#2eh ;2e='.' lcall write_data mov a,temper_d 84
  • 85. add a,#30h mov g_c,a lcall write_data mov a,#43h ;43h='C' lcall write_data pop 0 ret ;------------------ get_temper: lcall init_1820 setb dq bcd: jb flag1,s22 ljmp bcd s22: lcall delay1 mov a,#0cch lcall write_1820 mov a,#44h lcall write_1820 nop lcall delay lcall delay cba: lcall init_1820 jb flag1,abc ljmp cba abc: lcall delay1 mov a,#0cch lcall write_1820 mov a,#0beh lcall write_1820 85
  • 86. lcall read_18200 ret ;------------------ read_1820: mov r2,#8 re1: clr c setb dq nop nop clr dq nop nop nop setb dq mov r3,#7 djnz r3,$ mov c,dq mov r3,#23 djnz r3,$ rrc a djnz r2,re1 ret ;------------------- write_1820: mov r2,#8 clr c wr1: clr dq mov r3,#6 djnz r3,$ rrc a mov dq,c mov r3,#23 djnz r3,$ 86
  • 87. setb dq nop djnz r2,wr1 setb dq ret ;------------------- read_18200: mov r4,#2 mov r1,#3bh re00: mov r2,#8 re01: clr c setb dq nop nop clr dq nop nop nop setb dq mov r3,#7 djnz r3,$ mov c,dq mov r3,#23 djnz r3,$ rrc a djnz r2,re01 mov @r1,a dec r1 djnz r4,re00 ret ;------------------- temper_cov: mov a,#0f0h 87
  • 88. anl a,temper_l swap a mov temper_num,a mov a,temper_l jnb acc.3,temper_cov1 inc temper_num temper_cov1: mov a,temper_h anl a,#07h swap a orl a,temper_num mov temper_num,a mov a,#0fh anl a,temper_l mov temper_d,a clr c subb a,#10 jc jianlo mov temper_d,a inc temper_num jianlo: lcall bin_bcd ret ;------------------- bin_bcd: mov dptr,#temp_tab mov a,temper_num movc a,@a+dptr mov temper_num,a ret ;------------------- init_1820: 88
  • 89. setb dq nop clr dq mov r0,#80h tsr1: djnz r0,tsr1 setb dq mov r0,#25h ;96us-25h tsr2: djnz r0,tsr2 jnb dq,tsr3 ljmp tsr4 tsr3: setb flag1 ljmp tsr5 tsr4: clr flag1 ljmp tsr7 tsr5: mov r0,#06bh ;200us tsr6: djnz r0,tsr6 tsr7: setb dq ret ;------------------ re_config: jb flag1,re_config1 ret re_config1: mov a,#0cch lcall write_1820 mov a,#4eh lcall write_1820 mov a,#00h lcall write_1820 89
  • 90. mov a,#00h lcall write_1820 mov a,#7fh lcall write_1820 ret ;------------------ delay: mov r7,#2h min: djnz r7,ys500 ret ys500: lcall ys500us ljmp min ys500us: mov r6,#200 djnz r6,$ ret delay1: mov r7,#20h djnz r7,$ ret temp_tab: db 00h,01h,02h,03h,04h,05h,06h,07h db 08h,09h,10h,11h,12h,13h,14h,15h db 16h,17h,18h,19h,20h,21h,22h,23h db 24h,25h,26h,27h,28h,29h,30h,31h db 32h,33h,34h,35h,36h,37h,38h,39h db 40h,41h,42h,43h,44h,45h,46h,47h db 48h,49h,50h,51h,52h,53h,54h,55h db 56h,57h,58h,59h,60h,61h,62h,63h db 64h,65h,66h,67h,68h,69h,70h,71h db 72h,73h,74h,75h,76h,77h,78h,79h db 80h,81h,82h,83h,84h,85h,86h,87h 90