Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Разработка информационной системы



Рассмотрим некоторые моменты создания системы:

1. Разработка прототипа устройства мониторинга и прошивки для него.

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

 

#include < OneWire.h>

#include < DallasTemperature.h>

#include < SoftwareSerial.h>

 

#define ONE_WIRE_BUS 12

#define STARTUP_DELAY 10000

#define STANDARD_DELAY 1000

#define DELIM " @"

 

const String getTime = " AT+CCLK? ";

const String getOperator = " AT+CSPN? ";

const String getIME = " AT+CGSN";

 

String imei = " ";

String mobop = " ";

 

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(& oneWire);

DeviceAddress thermometer1;

DeviceAddress thermometer2;

SoftwareSerial GSMport(8, 7); // RX, TX

 

unsigned long previousMillis = 0;

const long interval = 60000;

 

void initGSM() {

String apn = " ";

String user = " ";

String pwd = " ";

String cont = " ";

if (mobop.indexOf(" MTS" ) > -1) {

apn = " internet.mts.ru";

user = " mts";

pwd = " mts";

cont = " internet.mts.ru";

} else if (mobop.indexOf(" BEELINE" ) > -1) {

apn = " internet.beeline.ru";

user = " beeline";

pwd = " beeline";

cont = " internet.beeline.ru";

} else if (mobop.indexOf(" MEGAFON" ) > -1) {

apn = " internet";

user = " megafon";

pwd = " megafon";

cont = " internet";

} else if (mobop.indexOf(" TELE2" ) > -1) {

apn = " internet.TELE2.ru";

user = " ";

pwd = " ";

cont = " internet.tele2.ru";

}

execCommand(" AT+SAPBR=3, 1, \" CONTYPE\", \" GPRS\" ", STANDARD_DELAY * 4);

execCommand(" AT+SAPBR=3, 1, \" APN\", \" " + apn + " \" ", STANDARD_DELAY);

execCommand(" AT+SAPBR=3, 1, \" USER\", \" " + user + " \" ", STANDARD_DELAY);

execCommand(" AT+SAPBR=3, 1, \" PWD\", \" " + pwd + " \" ", STANDARD_DELAY);

execCommand(" AT+CGDCONT=1, \" IP\", \" " + cont + " \" ", STANDARD_DELAY);

}

 

void gprs_send(String data) {

initGSM();

execCommand(" AT+SAPBR=1, 1", STANDARD_DELAY * 2);

execCommand(" AT+HTTPINIT", STANDARD_DELAY);

execCommand(" AT+HTTPPARA=\" CID\", 1", STANDARD_DELAY);

execCommand(" AT+HTTPPARA=\" URL\", \" http: //vps3908.vps.host.ru/recieveReadings.php\" ", STANDARD_DELAY * 2);

execCommand(" AT+HTTPPARA=\" CONTENT\", \" application/x-www-form-urlencoded\" ", STANDARD_DELAY);

execCommand(" AT+HTTPDATA=" + String(data.length()) + ", 10000", STANDARD_DELAY*2);

execCommand(data, STANDARD_DELAY*3);

execCommand(" AT+HTTPACTION=1", STANDARD_DELAY*5);

execCommand(" AT+HTTPTERM", STANDARD_DELAY * 2);

execCommand(" AT+SAPBR=0, 1", STANDARD_DELAY * 2);

}

 

String ReadGSM(void) {

int c;

String v;

while (GSMport.available()) {

c = GSMport.read();

v += char(c);

delay(10);

}

return v;

}

 

void initTemps(void) {

sensors.begin();

sensors.getAddress(thermometer1, 0);

sensors.getAddress(thermometer2, 1);

sensors.setResolution(thermometer1, 10);

sensors.setResolution(thermometer2, 10);

}

 

void sendTemps(void) {

sensors.requestTemperatures();

float t1 = sensors.getTempC(thermometer1);

Serial.println(t1);

float t2 = sensors.getTempC(thermometer2);

Serial.println(t2);

String toSend = formHeader() + DELIM + String(t1) + DELIM + String(t2);

gprs_send(toSend);

}

 

String execCommand(String comm, int d) {

Serial.println(" Flushed: " + ReadGSM());

GSMport.println(comm);

delay(d);

String response = ReadGSM();

Serial.println(response);

return response;

}

 

String formHeader() {

String uptime = execCommand(getTime, STANDARD_DELAY);

uptime.replace(" +CCLK: ", " " );

uptime.replace(getTime, " " );

cleanStr(uptime);

return " t1=" + imei + DELIM + uptime;

}

 

void cleanStr(String & str) {

str.replace(" OK", " " );

str.replace(" \" ", " " );

str.replace(" \n", " " );

str.replace(" \r", " " );

str.trim();

}

 

void setup(void)

{

delay(STARTUP_DELAY);

Serial.begin(9600);

GSMport.begin(9600);

execCommand(" AT", STANDARD_DELAY * 5);

mobop = execCommand(getOperator, STANDARD_DELAY * 3);

mobop.replace(" +CSPN: ", " " );

mobop.replace(getOperator, " " );

cleanStr(mobop);

mobop.toUpperCase();

imei = execCommand(getIME, STANDARD_DELAY * 3);

imei.replace(getIME, " " );

cleanStr(imei);

Serial.println(" Operator " + mobop);

Serial.println(" IMEI " + imei);

initTemps();

}

 

void loop(void)

{

if (GSMport.available())

Serial.write(GSMport.read());

if (Serial.available())

GSMport.write(Serial.read());

unsigned long currentMillis = millis();

if ((unsigned long)(currentMillis - previousMillis) > = interval) {

previousMillis = currentMillis;

sendTemps();

}

}

 

Функция setup выполняется однократно при запуске контроллера, она обеспечивает инициализацию серийных портов для связи контроллера с GSM-модулем и отладки, проверяет состояния модуля, отправив на него команду «AT», выясняет оператора мобильной связи и устанавливает глобальные переменные с настройками подключения в значения, соответствующие используемому оператору.

Надо заметить, что взаимодействие контроллера с GSM-модулем происходит через последовательный интерфейс с помощью так называемых AT-команд [8]. Для облегчения отправки этих команд модулю написана специальная оборачивающая функция execCommand.

После завершения функции setup контроллер входит в циклический режим и бесконечно выполняет функцию loop. В её теле находится проверка, прошло ли достаточно времени для следующей отправки показаний, чтение температур с датчиков, формирование и отправка запроса на сервер. Запрос представляет из себя обычный POST-запрос с одним параметром, содержащим через разделитель @ все необходимые данные: IMEI устройства, время его функционирования без перезагрузки, и сами показания температуры.

 

2. Создание готового устройства.

После тестирования прошивки и отправки тестовых запросов прототипом устройство было переведено на финальную аппаратную базу. Для этого во fritzing (Рис. 12) была спроектирована печатная плата, на которой размещаются все элементы, затем её трафарет распечатан на лазерном принтере, переведён на текстолит и вытравлен с помощью хлорного железа.

 

Рис. 13 Схема печатной платы во fritzing

 

Затем все компоненты были распаяны на печатной плате, а на контроллер залита прошивка. Готовое устройство изображено на Рис. 13. После этого устройство было помещено в корпус и подверглось тестированию надёжности. В течение суток оно было подключено к сети, отправляемые данные регистрировались сервером. Ошибок при отправке и приёме данных обнаружено не было, устройство и систему приёма данных сервера можно считать надёжными.

 

Рис. 14 Готовое устройство без корпуса


 

3. Разработка веб-сервера.

Веб-сервер использует AngularJS и websocket для асинхронного получения данных без перезагрузки страницы (Рис. 14). Для отображения температурных данных в виде графиков используется библиотека highcharts, которая также позволяет динамически обновлять графики.

 

Рис. 15 Вкладка с показаниями датчиков


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

 

Рис. 16 Сокет-события клиента


 

Документация ИС


Поделиться:



Популярное:

  1. I) Получение передаточных функций разомкнутой и замкнутой системы, по возмущению относительно выходной величины, по задающему воздействию относительно рассогласования .
  2. I. РАЗВИТИИ ЛЕКСИЧЕСКОЙ СИСТЕМЫ ЯЗЫКА У ДЕТЕЙ С ОБЩИМ НЕДОРАЗВИТИЕМ РЕЧИ
  3. II. О ФИЛОСОФСКОМ АНАЛИЗЕ СИСТЕМЫ МАКАРЕНКО
  4. V) Построение переходного процесса исходной замкнутой системы и определение ее прямых показателей качества
  5. А. Разомкнутые системы скалярного частотного управления асинхронными двигателями .
  6. АВИАЦИОННЫЕ ПРИБОРЫ И СИСТЕМЫ
  7. Автоматизированные информационно управляющие системы сортировочных станций
  8. Автоматизированные системы диспетчерского управления
  9. Автоматическая телефонная станция квазиэлектронной системы «КВАНТ»
  10. Агрегатные комплексы и системы технических средств автоматизации ГСП
  11. Алгебраическая сумма всех электрических зарядов любой замкнутой системы остается неизменной (какие бы процессы ни происходили внутри этой системы).
  12. Алгоритм упорядочивания системы.


Последнее изменение этой страницы: 2017-03-03; Просмотров: 526; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.028 с.)
Главная | Случайная страница | Обратная связь