Разработка комплекса приложений по обеспечению безопасности и управлению событиями

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 07.08.2018
Размер файла 1,8 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Федеральное агентство связи

Федеральное государственное бюджетное образовательное учреждение высшего образования «Поволжский государственный университет телекоммуникаций и информатики»
Факультет Информационных систем и технологий
Направление (специальность) 09.03.04 Программная инженерия
Кафедра Информационных систем и технологий
ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА
(БАКАЛАВРСКАЯ РАБОТА)
Разработка комплекса приложений по обеспечению безопасности и управлению событиями
Разработал Д.С. Крынин
Самара 2017

Задание

по подготовке выпускной квалификационной работы

Исходные данные и постановка задачи

1) Принципы построения систем обеспечения безопасности

2) Техническая документация на оборудование компании Atmel: - семейство микроконтроллеров tiny, mega, XMEGA

3) Техническая документация на оборудование обеспечения безопасности и автоматизации

4) Рассмотреть перспективы модернизации системы автоматизации на базе доступного оборудования

5) Разработать план размещения компонентов системы и выполнить расчет необходимого оборудования

6) Разработать прототип системы

Реферат

Название

_Разработка комплекса приложений по обеспечению _безопасности и управлению_ событиями___________

Автор

_Крынин Даниил Сергеевич_______________________

Научный руководитель

_Назаренко Пётр Александрович _____________________________________________

Ключевые слова

_Система автоматизации, система обеспечение _безопасности, микроконтроллер, C++, система _управления событиями__________________________

Дата публикации

_2017__________________________________________

Библиографическое описание

_Крынин, Д.С. Разработка комплекса приложений по _обеспечению безопасности и управлению_ событиями _ [Текст]: дипломный проект / Д. С. Крынин. Поволжс-_кий государственный университет телекоммуникаций _и информатики (ПГУТИ)._Факультет информацион-_ных систем и технологий (ФИСТ).Кафедра информа-_ционных систем и технологий___________________

_ (ИСТ): науч. рук. П.А. Назаренко - Самара, 2017. -_

_64 c._________________________ _________________

Аннотация

Исследуются существующие системы автоматизации и обоспечения безопасности и их методы реализации. Исслеуются современные микроконтроллеры и производится их анализ для построения прототипа системы. Описываются разрабатываемые методы, их реализация и особенности использования в конкретном прототипе. Производится оценка стоимости системы. ________________________________________________

Введение

В современном мире, развитие информационных технологий набрало большие обороты. Благодаря этому, с каждым годом всё больше, в жизнь человека начали входить всевозможного рода машины, гаджеты, приборы, приспособления и устройства, которые в свою очередь призваны облегчить и автоматизировать различную работу, которую раньше мог выполнить только сам человек. Изобретение метода производства по типу «конвейер», в своё время дало огромный толчок для развития производства, т.к. сборка сложных механизмов перешла в рутинный и монотонный низкоквалифицированный труд, что позволило в несколько раз уменьшить время производства. Внедрение системы автоматического управления событиями, а именно автоматизированной сборки, при помощи манипуляторов, произвело не меньший фурор, потому, что позволило в некоторых областях производства полностью убрать человека от непосредственно конвейера, что позволило повысить производительность и качество. Это было бы невозможно без существования систем автоматического управления событиями. Таким образом они плотно вошли в нашу жизнь и позволяют совершенствовать существующие технологии, оптимизируя их работу.

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

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

Дома человек проводит большую часть своего свободного времени, поэтому автоматизация различных систем приведет к упрощению быта.

Таким образом, цель выпускной квалификационной работы, заключается в исследовании существующих и разработке, прототипа системы обеспечения безопасности, и автоматического управление различными событиями при помощи системы автоматизации в пределах жилого помещения, в том числе и система контроля доступа в помещение. На данный момент микроконтроллеры приобрели определённую популярность в сфере построения систем автоматизации и обеспечения безопасности помещений, а их программирование возможно на языке высокого уровня С++.

Объектом выпускной квалификационной работы являются методы, реализующие работу системы обеспечения безопасности и управления событиями, которая в свою очередь должна в автоматическом режиме производить мониторинг различных параметров и на основе заданных алгоритмов производить различные действия. Предметом работы является реализация методов обеспечения безопасности и управления событиями с помощью языка программирования C++ для создания программного обеспечение на базе микроконтроллера AVR.

Теоретические, практические вопросы, которые были изучены и лежат в основе выпускной квалификационной работы, рассмотрены в большом количестве источников различного характера. К таким источникам относятся учебные и учебно-методические пособия, специальные издания и электронные источники информации. Язык программирования C++описывается в книге Б. Страуструпом [1]. Вопросы связанные с микроконтроллерами семейства AVR изложены в работах А. В. Белова[2], В. Н. Баранова[3], М.С. Голубцова[4], Е. И. Манаев[5], С. М. Рюмик[6], В. Трамперт[7], В. Я. Хартов[8], А. Водовозов[9], В. С. Прокопенко[10], Ю. В. Ревич[11]. Описание различных видов систем «Умного дома», существующих систем, а также концептуальных решений изложено в статье Р. Р. Тимерханова[12] и в книге Е. Тесля[13]

Пояснительная записка к выпускной квалификационной работе состоит из введения, четырёх разделов, заключения, списка использованных источников и приложений. В первом разделе выполняется постановка задачи, формулируются требования к создаваемому программному обеспечению, описывается язык программирования C++, возможности его применения, его основные особенности и недостатки.

Во втором разделе описывается понятие микроконтроллера, разновидности, их параметры.

В третьем разделе рассматривается модель построения системы «умного дома», основные назначения функций и выбор устройств.

В четвёртом разделе описывается разработка программного обеспечения для микроконтроллера на языке C++ на основе описанной ранее модели. Описываются структуры данных и операции, и обработки, а также использование этих структур данных и операций.

Заключение содержит обобщённые результаты выпускной квалификационной работы, выводы по работе и рекомендации по использованию её результатов.

1. Постановка задачи и теоретическое обоснование работы

1.1 Постановка задачи работы

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

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

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

На данный момент система автоматизации вкупе с системой обеспечения безопасности стала очень популярна среди владельцев частных домов, квартир и различного рода помещений. Так называемая система «Умный дом» (Рис. 1.1) помогает контролировать доступ и управлять всевозможными событиями в автоматическом режиме, без вмешательства человека. Достаточно много организаций предлагают свои услуги по разработке данной системы и внедрения её, но стоимость крайне велика и не доступна для всех слоёв населения.

В 2017 году стоимость отдельных электронных компонентов таких как: микроконтроллер, датчик движения, датчик температуры и влажности, датчик освещенности и др. уменьшилась настолько, что их может себе позволить любой заинтересованный в них человек и попробовать разработать и собрать собственный прототип, аналог системы автоматизации и безопасности.

Достаточно популярными, на сегодняшний день, микроконтроллерами, являются 8-битные контроллеры компании Atmel. Из-за большой линейки семейств, из-за маленькой стоимости и из-за доступного программирования на языке высокого уровня C++, микроконтроллеры данной компании можно встретить в свободной розничной продажи практически во всех магазинах радиоэлектроники. Для упрощения работы с ними, на их базе создаются различного рода отладочные платы, на которых можно не только реализовать различные проекты, но и отладить их работу.

Рис 1.1 - Пример системы «Умный дом»

На основе вышеперечисленного обобщенная задача выпускной квалификационной работы заключается в создании прототипа программного обеспечения на языке С++ для микроконтроллера компании Atmel, на базе методов, которые позволяют реализовать систему автоматизацию и обеспечение безопасности жилого помещения. Система разрабатывается на основе конкретных условий, поэтому модель будет строится на основе типового проекта реального жилого помещения. Требуется изучить различные существующие системы, их методы, и использовать самые оптимальные из них. Система должна быть очень близка по функционалу к существующим системам, но отличатся конечной стоимостью.

1.2 Требования к создаваемому программному обеспечению

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

Рис 1.2 -Типовой план однокомнатной квартиры с совмещенным санузлом

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

1.3 Язык программирования С++

С++ -- язык программирования высокого уровня.

Он поддерживает такие типы программирования, как процедурное программирование, объектно-ориентированное программирование, обобщённое программирование. Данный язык имеет богатую стандартную библиотеку, которая включает в себя распространённые контейнеры и часто используемые алгоритмы, ввод-вывод, регулярные выражения, поддержку много поточности и другие возможности. С++ сочетает свойства как высокоуровневых, так и низкоуровневых языков программирования. В сравнении с языком С, чьим последователем считается С++, в нем наибольшее внимание было уделено поддержке объектно-ориентированного и обобщённого программирования.

С++ значится одним из самых распространённых в разработки программного обеспечения, считаясь одним из самых популярных, на сегодняшний день, языков программирования. Имеет достаточно широкую область применения: создание операционных систем, прикладных программ различного назначения, драйверов устройств, высокопроизводительных серверов, программ для микроконтроллеров, а также разнообразных развлекательных приложений. На сегодняшний день существует огромное количество реализаций данного языка, как бесплатных, так и коммерческих и для различных платформ. Например, на платформе x86 это GСС, Visual С++, Intel С++ Сompiler, Embаrсаdеrо (Bоrlаnd) С++ Buildеr и другие. С++ оказывает огромное влияние на другие языки программирования, высокого уровня, в первую очередь на Jаvа и С#. Синтаксис С++ унаследован от языка С. Одним из принципов его разработки было сохранение совместимости с предшественником. Тем не менее, С++ не является в строгом смысле продолжением языка С; множество программ, которые могут одинаково успешно транслироваться как компиляторами С, так и компиляторами С++, довольно велико, но не включает все возможные программы на С. Стандарт С++ состоит из двух основных частей: описание ядра языка и описание стандартной библиотеки. На начальном этапе язык развивался вне определенных рамок, спонтанно, по мере задач, встававших перед ним. Развитию языка сопутствовало развитие кросс-компилятора сfrоnt, производящий исполняемый код для платформы, отличной от той, на которой исполняется сам кросс-компилятор. Новшества в языке отражались в изменении номера версии кросс-компилятора. Эти номера версий кросс-компилятора распространялись и на сам язык, но применительно к настоящему времени речь о версиях языка С++ не ведут. Лишь в 1998 язык стал стандартизированным языком. С++ поддерживает как комментарии в стиле С (/* комментарий */), так и однострочные (// вся оставшаяся часть строки является комментарием), где «//» обозначает начало комментария, а ближайший последующий символ новой строки, который не предварён символом \ (либо эквивалентным ему обозначением ??/), считается окончанием данного комментария. Его плюс в том, что не обязательно ставить знак окончания комментария. Спецификатор inlinе для функций.

Функция, определённая внутри тела класса, является inlinе по умолчанию. Данный спецификатор является подсказкой компилятору и может встроить тело функции в код вместо её непосредственного вызова.

Квалификаторы cоnst и vоlаtie

В отличие от языка С, где соnst обозначает только доступ на чтение, в C++ переменная с квалификатором соnst должна быть инициализирована. vоlаtilе используется в описании переменных и информирует компилятор, что значение данной переменной может быть изменено способом, который компилятор не в состоянии отследить. Для переменных, объявленных vоlаtilе, компилятор не должен применять средства оптимизации, изменяющие положение переменной в памяти (например, помещающие её в регистр) или полагающиеся на неизменность значения переменной в промежутке между двумя присваиваниями ей значения. В многоядерной системе vоlаtilе помогает избегать барьеров памяти 2-го типа

Пространства имён (nаmеspасе).

Пример:

namespace Foo

{

соnst int x=5;

}

соnst int y = Foo::x;

Специальным случаем является безымянное пространство имён. Все имена, описанные в нём, доступны только в текущей единице трансляции и имеют локальное связывание. Пространство имён std содержит в себе стандартные библиотеки языка С++.

Для работы с памятью введены операторы nеw, nеw[], dеlеtе и dеlеtе[]. В отличие от библиотечных mаllоc и frее, пришедших из языка С, данные операторы производят инициализацию объекта. Для классов это вызов конструктора, для POD типов инициализация можно либо не проводить (nеw Pоd;), либо провести инициализацию нулевыми значениями (nеw Pоd(); nеw Pоd{};).

Типы

В С++ доступны следующие встроенные типы. Типы С++ практически полностью повторяют типы в С:

Символьные: chаr, wсhаr_t (char16_t и char32_t, в стандарте С++11).

Целочисленные знаковые: signеd chаr, shоrt int, int, lоng int (и lоng lоng, в стандарте С++11).

Целочисленные без знаковые: unsignеd chаr, unsignеd shоrt int, unsignеd int, unsignеd lоng int (и unsignеd lоng lоng, в стандарте С++11).

С плавающей точкой: flоаt, dоuble, lоng dоublе.

Логический: bооl, имеющий значения truе или fаlsе.

Операции сравнения возвращают тип bооl. Выражения в скобках после if, whilе приводятся к типу bооl.

Язык ввёл понятие ссылок, а начиная с одиннадцатой версии стандарта rvаluе ссылки и fоrwаrding ссылки.

С++ добавляет к языку С объектно-ориентированные возможности. Он вводит понятие классы, которые обеспечивают три самых важных свойства ООП: инкапсуляцию, наследование и полиморфизм.

В стандарте С++ под классом (clаss) подразумевается пользовательский тип, объявленный с использованием одного из ключевых слов clаss, struct или uniоn, под структурой (structurе) подразумевается класс, определённый через ключевое слово struct, и под объединением (uniоn) подразумевается класс, определённый через ключевое слово uniоn.

В теле определения класса можно указать как объявления функций, так и определение. В последнем случае функция является встраиваемой (inlinе)). Нестатические функции-члены могут иметь квалификаторы cоnst и vоlаtilе, а также ссылочный квалификатор (& или &&).

Наследование

С++ поддерживает множественное наследование. Наследование от каждого класса может публичным, защищённым или закрытым: Также С++ поддерживает виртуальное наследование.

Доступ члена базового класса/режим наследования

privаtе-член

protected-член

public-член

privаtе-наследование

недоступен

private

private

prоtеctеd-наследование

недоступен

protected

protected

public-наследование

недоступен

protected

public

Полиморфизм

С++ поддерживает динамический полиморфизм и параметрический полиморфизм.

Параметрический полиморфизм представлен:

Аргументами по умолчанию для функций. К примеру, для функции void f(int x, int y=5, int z=10), вызовы f(1), f(1,5) и f(1,5,10)эквивалентны.

Перегрузка функций: функция с одним именем может иметь разное число и разные по типу аргументы.

Например:

void Print(int x);

void Print(double x);

void Print(int x, int y);

Частным случаем перегрузки функций можно считать перегрузку операторов.

Динамический полиморфизм реализуется с помощью виртуальных методов и иерархии наследования. Полиморфным в C++ является тип, имеющий хотя бы один виртуальный метод. Пример иерархии:

class Figure

{

public:

virtual void Draw() = 0; // чистый виртуальный метод

virtual ~Figure(); // при наличии хотя бы одного виртуального метода деструктор следует сделать виртуальным

};

class Square: public Figure

{

public:

void Draw() override;

};

class Circle: public Figure

{

public:

void Draw() override;

};

Здесь класс Figure является абстрактным (и, даже, интерфейсным), так как метод Draw не определён. Объекты данного класса нельзя создать, зато можно использовать ссылки или указатели с типом Figure. Выбор реализации метода Draw будет производиться во время выполнения исходя из реального типа объекта.

Инкапсуляция

Инкапсуляция в С++ реализуется через указание уровня доступа к членам класса: они бывают, так называемыми, публичными (открытыми, public), защищёнными (protected) и приватными (закрытыми, private). В C++ структуры лишь формально отличаются от классов тем, что по умолчанию уровень доступа к членам класса и тип наследования у структуры публичные, а у класса -- приватные.

Доступ

private

protected

public

Сам класс

да

да

да

Друзья

да

да

да

Наследники

нет

да

да

Извне

нет

нет

да

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

Друзья

Функции-друзья -- это функции, не являющиеся функциями-членами и тем не менее имеющие доступ к защищённым и закрытым членам класса. Они должны быть объявлены в теле класса как friend.

Например:

class Matrix {

friend Matrix Multiply(Matrix m1, Matrix m2);

};

Здесь функция Multiply может обращаться к любым полям и функциям-членам класса Matrix.

Дружественным может быть объявлен как весь класс, так и функция-член класса. Четыре важных ограничения, накладываемых на отношения дружественности в C++:

Дружественность не транзитивна. Если A объявляет другом B, а B, в свою очередь, объявляет другом C, то C не становится автоматически другом для A. Для этого A должен явно объявить C своим другом.

Дружественность не взаимна. Если класс A объявляет другом класс B, то он не становится автоматически другом для B. Для этого должно существовать явное объявление дружественности A в классе B.

Дружественность не наследуется. Если A объявляет класс B своим другом, то потомки B не становятся автоматически друзьями A. Для этого каждый из них должен быть объявлен другом A в явной форме.

Дружественность не распространяется на потомков. Если класс A объявляет B другом, то B не становится автоматически другом для классов-потомков A. Каждый потомок, если это нужно, должен объявить B своим другом самостоятельно.

В общем виде это правило можно сформулировать следующим образом: «Отношение дружественности существует только между теми классами (классом и функцией), для которых оно было явно объявлено в коде, и действует только в том направлении, в котором оно объявлено».

Специальные функции

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

class Array {

public:

Array() = default; // компилятор создаст конструктор по-умолчанию сам

Array(size_t _len):

len(_len) {

val = new double[_len];

}

Array(const Array & a) = delete; // конструктор копирования явно удалён

Array(Array && a); // конструктор перемещения

~Array() {

delete[] val;

}

Array& operator=(const Array& rhs); // оператор присваивания копированием

Array& operator=(Array&& rhs); // оператор присваивания перемещением

double& operator[](size_t i) {

return val[i];

}

const double& operator[](size_t i) const {

return val[i];

}

protected:

std::size_t len {0}; // инициализация поля

double* val {nullptr};

};

Конструктор вызывается для инициализации объекта (соответствующего типа) при его создании, а деструктор -- для уничтожения данного объекта. Класс может иметь несколько конструкторов, но деструктор может иметь только один. Конструкторы в C++ не могут быть объявлены виртуальными, а деструкторы -- могут, и обычно объявляются для всех полиморфных типов, чтобы гарантировать правильное уничтожение доступного по ссылке или указателю объекта независимо от того, какого типа ссылка или указатель. При наличии хотя бы у одного из базовых классов виртуального деструктора, деструктор класса потомка автоматически становится виртуальным.

Шаблоны

Шаблоны позволяют порождать функции и классы, параметризованные определённым типом или значением. Например, предыдущий класс мог бы реализовывать массив для любого типа данных:

template <typename T>

class Array {

...

T& operator[](size_t i) {

return val[i];

}

protected:

std::size_t len {0}; // инициализация поля

T* val {nullptr};

};

Общая структура

Стандартная библиотека C++ включает в себя набор определённых средств, которые должны быть доступны для реализации любого языка, чтобы обеспечить программистам более удобное пользование языковыми средствами и создать базу для разработки как прикладных приложений самого широкого спектра, так и специализированных библиотек. Стандартная библиотека С++ включает в себя часть стандартной библиотеки C. Стандарт C++ содержит нормативную ссылку на стандарт языка C от 1990 года и не определяет самостоятельно те функции стандартной библиотеки, которые заимствуются из стандартной библиотеки C.

Доступ к возможностям стандартной библиотеки C++ обеспечивается с помощью включения в программу (посредством директивы #include) соответствующих стандартных заголовочных файлов. Всего в стандарте C++11 версии, определено 79 таких файлов. Средства стандартной библиотеки объявляются как входящие в пространство имён std. Заголовочные файлы, имена которых соответствуют шаблону «cX», где X -- имя заголовочного файла стандартной библиотеки C без расширения (cstdlib, cstring, cstdio и пр.), содержат объявления, соответствующие данной части стандартной библиотеки C. Стандартные функции библиотеки C также находятся в пространстве имён std.

Состав

Стандартная библиотека включает в себя следующие разделы:

Поддержка языка. Включает средства, которые необходимы для работы программ, а также некоторые сведения об особенностях реализации. Выделение памяти, RTTI, базовые исключения, пределы значений для числовых типов данных, базовые средства взаимодействия со средой, такие как системные часы, обработка сигналов UNIX, завершение программы.

Стандартные контейнеры. В стандартную библиотеку входят шаблоны для контейнеров: динамический массив(vector), статический массив(array), одно- и двунаправленные списки (list, forward_list), стек(stack), дек(deque), ассоциативные массивы (map, multimap), множества (set, multiset), очередь с приоритетом (priority_queue).

Основные утилиты. В этот раздел входит описание основных базовых элементов, применяемых в стандартной библиотеке, распределителей памяти и поддержка времени и даты в стиле языка C.

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

Алгоритмы. Шаблоны для описания операций обработки, которые с помощью механизмов стандартной библиотеки могут применяться к любой последовательности элементов, в том числе к элементам в контейнерах. Также в этот раздел входят описания функций bsearch() и qsort() из стандартной библиотеки языка C.

Строки. Шаблоны строк в стиле C++. Также в этот раздел попадает часть библиотек для работы со строками и символами в стиле языка C.

Ввод-вывод. Шаблоны и вспомогательные классы для потоков ввода-вывода общего вида, строкового ввода-вывода, манипуляторы (средства управления форматом потокового ввода-вывода в стиле C++).

Локализация. Определения, используемые для поддержки национальных особенностей и форматов представления (дат, валют и т. д.) в стиле C++ и в стиле языка C.

Диагностика. Определения ряда исключений и механизмов проверки утверждений во время выполнения (assert). Поддержка обработки ошибок в стиле языка C.

Числа. Определения для работы с комплексными числами, математическими векторами, поддержка общих математических функций, генератор псевдослучайных чисел.

Контейнеры, строки, алгоритмы, итераторы и основные утилиты, за исключением заимствований из библиотеки языка C, собирательно называются STL (Standard Template Library -- стандартная шаблонная библиотека). Изначально эта библиотека была отдельным продуктом, и её аббревиатура расшифровывалась иначе, но потом она вошла в стандартную библиотеку C++ в качестве неотъемлемого элемента. В названии отражено то, что для реализации средств общего вида (контейнеров, строк, алгоритмов) использованы механизмы обобщённого программирования (шаблоны C++ -- template). В работах Бьерна Страуструпа подробно описываются причины, по которым был сделан именно такой выбор. Основными из них являются большая универсальность выбранного решения (шаблонные контейнеры, в отличие от объектных, могут легко использоваться для не объектных типов и не требуют наличия общего предка у типов элементов) и его техническая эффективность (как правило, операции шаблонного контейнера не требуют вызовов виртуальных функций и могут легко встраиваться (inline), что в итоге даёт выигрыш в производительности).

Начиная со стандарта C++ 11 версии добавились следующие возможности:

Добавлена библиотека <regex>, реализующая общепринятые механизмы поиска и подстановки с помощью регулярных выражений.

Добавлена поддержка много поточности.

Атомарные операции

unordered варианты ассоциативных массивов и множеств.

Умные указатели, обеспечивающие автоматическое освобождение выделенной памяти.

Совместимость с языком С

Выбор языка C в качестве начальной базы для создания нового языка программирования объясняется тем, что C:

1. является многоцелевым, лаконичным и относительно низкоуровневым языком;

2. подходит для решения большинства системных задач;

3. исполняется везде и на всём;

4. стыкуется со средой программирования UNIX.

-- Бьерн Страуструп. Язык программирования C++.

Несмотря на ряд известных недостатков языка C, Страуструп пошёл на его использование в качестве основы, так как «в C есть свои проблемы, но их имел бы и разработанный с нуля язык, а проблемы C нам известны». Кроме того, это позволило быстро получить прототип компилятора (cfront), который лишь выполнял трансляцию добавленных синтаксических элементов в оригинальный язык C.

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

сохранение действующего кода, написанного изначально на языке C и прямо перенесённого в C++;

исключение необходимости переучивания программистов, ранее изучавших язык C (им требуется только изучить новые средства C++);

исключение путаницы между языками при их совместном использовании («если два языка используются совместно, их различия должны быть или минимальными, или настолько большими, чтобы языки было невозможно перепутать»).

«Основные отличия C++ от C»

Новые возможности C++ включают объявления в виде выражений, преобразования типов в виде функций, операторы new и delete, тип Boolean(bool), ссылки, расширенное понятие константности, подставляемые функции, аргументы по умолчанию, переопределения(перезагрузка), пространства имён, классы (включая и все связанные с классами возможности, такие как наследование, функции-члены, виртуальные функции, абстрактные классы и конструкторы), переопределения операторов, шаблоны, оператор::, обработку исключений, динамическую идентификацию и многое другое. Язык C++ также во многих случаях строже относится к проверке типов, чем C.

В C++ появились комментарии в виде двойной косой черты (//), которые были в предшественнике C -- языке BCPL.

Некоторые особенности C++ позднее были перенесены в C, например, ключевые слова const и inline, объявления в циклах for и однострочные комментарии в стиле C++ (//). В более поздних реализациях языка C также были представлены возможности, которых нет в C++, например: макросы va_arg и улучшенная работа с массивами-параметрами.

C++ не включает в себя C

Несмотря на то, что большая часть кода, написанная на языке C будет справедлива и для C++, C++ не является потомком языка С. Существует и такой верный для C код, который неверен для C++. Это отличает его от Objective C, ещё одного усовершенствования C для ООП, как раз являющегося надмножеством C.

Существуют и другие различия. Например, C++ не разрешает вызывать функцию main() внутри программы, в то время как в языке C это действие правомерно. Кроме того, C++ более строг в некоторых вопросах; например, он не допускает неявное приведение типов между несвязанными типами указателей и не разрешает использовать функции, которые ещё не объявлены.

Более того, код, верный для обоих языков, может давать разные результаты в зависимости от того, компилятором какого языка он оттранслирован. Например, на большинстве платформ следующая программа печатает «С», если компилируется компилятором C, и «C++» -- если компилятором C++. Так происходит из-за того, что символьные константы в C (например, 'a') имеют тип int, а в C++ -- тип char, а размеры этих типов обычно различаются.

#include <stdio.h>

int main()

{

printf("%s\n", (sizeof('a') == sizeof(char)) ? "C++": "C");

return 0;

}

Средства C, которых рекомендуется избегать

По замечанию Бьерна Страуструпа, «чем лучше вы знаете C, тем труднее вам будет избежать программирования на C++ в стиле C, теряя при этом потенциальные преимущества C++». В связи с этим он предлогает следующий ряд рекомендаций для программистов на языке C, чтобы в полной мере воспользоваться преимуществами, его детища, C++:

Не использовать макроопределения #define. Для объявления констант применять const, групп констант (перечислений) -- enum, для прямого включения функций -- inline, для определения семейств функций или типов -- template.

Не использовать предварительные объявления переменных. Объявлять переменные в блоке, где они реально используются, всегда совмещая объявление с инициализацией.

Отказаться от использования malloc()[13] в пользу оператора new, от realloc()[14] -- в пользу типа vector. Более безопасным будет использование умных указателей, таких как shared_ptr и unique_ptr, доступных с одиннадцатой версии стандарта.

Избегать безтиповых указателей, арифметики указателей, неявных приведений типов, объединений, за исключением, возможно, низкоуровневого кода. Использовать «новые» преобразования типов, как более точно выражающие действительные намерения программиста и более безопасные.

Свести к минимуму использование массивов символов и строк в стиле языка C, заменив их на типы string и vector из STL.

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

Реализации

STL до включения в стандарт C++ была сторонней разработкой, в начале -- фирмы Hewlett-Packard, а затем SGI. Стандарт языка не называет её «STL», ведь данная библиотека стала неотъемлемой частью языка, однако многие люди до сих пор используют подобное название, чтобы отличать её от остальной части стандартной библиотеки (потоки ввода-вывода (iostream), подраздел C и другие).

Проект под названием STLport[15], основанный на SGI STL, осуществляет постоянное обновление STL, IOstream и строковых классов. Некоторые другие проекты также занимаются разработкой частных применений стандартной библиотеки.

Дальнейшее развитие

Текущий стандарт языка ISO/IEC 14882:2014 был принят в 2014 году. Неофициально его обозначают как C++14. Следующая версия стандарта, запланированная на текущий 2017 год и имеет неофициальное обозначение C++17.

Общие направления развития C++

По мнению автора языка Бьерна Страуструпа, говоря о дальнейшем развитии и перспективах данного языка, можно выделить следующее:

В основном дальнейшее развитие языка будет идти по пути внесения дополнений в стандартную библиотеку. Одним из основных источников этих дополнений является известная библиотека boost.

Изменения в ядре языка не должны приводить к снижению уже достигнутой эффективности C++. С точки зрения Страуструпа, предпочтительнее внесение в ядро нескольких серьёзных больших изменений, чем множества мелких правок.

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

В целом C++ спроектирован и развивается как мультипарадигменный язык, впитывающий в себя различные методы и технологии программирования, но реализующий их на платформе, обеспечивающей высокую техническую эффективность. Поэтому в будущем не исключено добавление в язык средств функционального программирования, автоматической сборки мусора и других отсутствующих в нём сейчас механизмов. Но в любом случае это будет делаться на имеющейся платформе высокоэффективного компилируемого языка.

Хотя формально одним из принципов C++ остаётся сохранение совместимости с языком C, фактически группы по стандартизации этих языков не взаимодействуют, а вносимые ими изменения не только не коррелируют, но и нередко принципиально противоречат друг другу идеологически. Так, элементы, которые новые стандарты C добавляют в ядро, в стандарте C++ являются элементами стандартной библиотеки и в ядре вообще отсутствуют, например, динамические массивы, массивы с фиксированными границами, средства параллельной обработки. Как считает Страуструп, объединение разработки этих двух языков принесло бы большую пользу, но оно вряд ли возможно по политическим соображениям. Так что практическая совместимость между C и C++ постепенно будет утрачиваться.

2. Понятие микроконтроллера, разновидности, их параметры

2.1 Микроконтроллера как самостоятельные устройства

Микроконтроллер -- микросхема, содержащая в себе полноценный набор компонентов электронно-вычислительной машины. На одном кристалле он может совмещать помимо процессора еще оперативно-запоминающее устройство и постоянно-запоминающее устройство. Микроконтроллер отличается от микропроцессора интегрированными устройствами ввода-вывода. Электронные компоненты могут быть различными по мощности: частота процессора, размер памяти может быть абсолютно любой, поэтому на сегодняшний день существует очень большое количество моделей. Микроконтроллеры используются, там, где нужна компактность и в тоже время не высокая цена, относительно полноценной электронно-вычислительной машины.

Микроконтроллеры используются в вычислительной технике, устройствах промышленной автоматике, разнообразной бытовой технике которая требует систему автоматического управления, системах «умный дом». На рынке электронных компонентов, сейчас представлены контроллеры разной разрядности: 8, 16, 32 битные. Крупными производителями являются компании: Atmel, STMicroelectronics, Microchip, Texas Instruments Stellari, Intel.

Самым первым микроконтроллером считается Intel 8048, который появился спустя 5 лет после создания первого микропроцессора. Микросхема содержала как центральный процессор, так и 1 Кбайт встроенной памяти, 64 Байта оперативной памяти и 27 портов ввода-вывода. Следующий продукт Intel 8051 который был выпущен на рынок в 1980 году стал очень популярным и поистине классическим решением в использование микроконтроллеров. Первые значительные изменения в данном классе, произошли с появлением PIC-контроллера от компании Microchip. Стоимость была рекордно низкой относительно конкурентов, что позволило охватить большую часть рынка. Настоящую революцию произвела компания Atmel в 1996 году представив свою линейку AVR. Более производительные контроллеры превосходящие разработки Microchip, и привлекательная стоимость быстро вывело продукт Atmel на первое место. Семейство, AVR имеют более продвинутую, развитую систему команд и насчитывает примерно до 133 инструкций. Доступность, бесплатно распространяемого программного обеспечения сыграло не мало важную роль, что начинающие разработчики смогли начать освоение микроконтроллеров. В 2008 году компания STMicroelectronics выпустила модель STM8, которая являлась 8-ми битным микроконтроллером. Данная компания обратила на себя внимания большим модельным рядом и конкурентно способной ценой при сравнительно одинаковой производительности относительно конкурентов. Но распространённость в России была не высока из-за отсутствия учебной литературы.

2.2Линейка AVR от Atmel

На сегодняшний день самым распространённым микроконтроллером всё еще является линейка AVR от Atmel. Она представлена тремя сериями: tiny, mega, XMEGA.

tinyAVR (ATtinyxxx):

Флеш-память до 16 Кб; SRAM до 512 б; EEPROM до 512 б;

Число линий ввода-вывода 4-18 (общее количество выводов 6-32);

Ограниченный набор периферийных устройств.

megaAVR (ATmegaxxx):

Флеш-память до 256 Кб; SRAM до 16 Кб; EEPROM до 4 Кб;

Число линий ввода-вывода 23-86 (общее количество выводов 28-100);

Аппаратный умножитель;

Расширенная система команд и периферийных устройств.

XMEGAAVR (ATxmegaxxx):

Флеш-память до 384 Кб; SRAM до 32 Кб; EEPROM до 4 Кб;

Четырёхканальный DMA-контроллер;

Инновационная система обработки событий.

Цифры после префикса обозначают объём встроенной flash-памяти (в КБ) и модификацию контроллера. А именно -- максимальная степень двойки, следующая за префиксом, обозначает объём памяти, а оставшиеся цифры определяют модификацию (напр., ATmega128 -- объём памяти 128 КБ; ATmega168 -- объём памяти 16 КБ, модификация 8; ATtiny44 и ATtiny45 -- память 4 КБ, модификации 4 и 5 соответственно).

Для разработки различного рода небольших проектов, подойдет серия mega, обладающая достаточным количеством памяти и портами ввода\вывода. На её основе, сейчас доступно огромное количество отладочных плат благодаря которым облегчается процесс загрузки программного обеспечения в плату, а также обеспечение питанием. Компания Arduino является ведущей в выпуске плат на основе микроконтроллеров серии ATmega

Рис 1.3 Отладочные платы компании Arduino на базе микроконтроллера ATmega

Данные платы имеют заранее прошитое программное обеспечение, в микроконтроллере(загрузчик-bootloader), которое помогает прошивать плату без внешнего аппаратного программатора. Наличие на плате преобразователя логического уровня с USB до TTL позволяет подключать плату непосредственно к USB порту компьютера.

Создание данных отладочных плат дало огромный толчок в развитие программирование микроконтроллеров среди начинающих.

2.3 Программирование отладочных плат Arduino на базе микроконтроллера ATmega

Язык программирования отладочных плат Arduino является стандартный C++ с использованием своих заголовочных файлах, содержащие описание конфигурации микроконтроллера. Компанией была выпущена среда разработки Arduino IDE для начинающих разработчиков. Данный продукт представляет собой текстовый редактор с возможностью загрузки программного обеспечения, через программный загрузчик, прошитый в микроконтроллер. Существует большое количество альтернативных сред разработки, например, привычный для многих продукт компании Microsoft, Microsoft Visual Studio с бесплатным расширением Visual Micro. Данное расширение, позволит загружать программное обеспечение через программный загрузчик, без использования аппаратной перезагрузки устройства. Загрузчик создан на основе Atmel AVR Application Note AN109. Загрузчик может работать через интерфейсы RS-232, USB или Ethernet в зависимости от состава периферии конкретной отладочной платы. В некоторых вариантах, таких как Arduino Mini, для программирования требуется отдельный переходник.

3. Модель построения системы «умного дома», основные назначения и выбор устройств

3.1 Описание модели системы

В настоящее время каждая компания, которая разрабатывает систему автоматизации и обеспечения безопасности «умный дом», предлагает свою модель её реализации, на основе возможностях разработки и типовых решений. В каждой из них, используется централизованная система мониторинга параметров с датчиков (Рис 1.1). Характеристики и параметры, центрального контроллера, в существующих системах невозможно распознать. В прототипе разрабатываемой системе тоже будет использоваться централизованная система, но на основе отладочной платы на базе микроконтроллера линейки AVR. Более точную информацию о конкретной модели мы сможем получить, когда будет известно конечное количество устройств, которое будет подключаться к портам ввода\вывода. На основе разработанного задания, и типового плана однокомнатной квартиры необходимо составить модель расположения компонентов.

3.2 Составляющие системы и её модель

Автоматическое управление светом

В разрабатываемом прототипе, необходимо реализовать функцию автоматического управления светом. Предполагается использование электромагнитного реле, с опорным питанием 5 Вольт постоянного тока и гальванической развязкой, для замыкания\размыкания контактов электрической цепи электросети 220Вольт переменного тока с потребителями. Гальваническая развязка -- передача энергии или сигнала между электрическими цепями без электрического контакта между ними. Примером использования гальванической развязки, может являться схема на основе оптрона или транзистора. Она необходима для защиты микроконтроллера от воздействий высокого напряжения, которые могут быть на него оказаны и при котором он выйдет из строя. Количество электромагнитных реле зависит от конечного количества осветительных приборов в каждом из помещения. Предположим, что в каждом помещении будет устанавливаться по одному источнику света, или множества источников света, которые необходимо включать единовременно, тогда количество электромагнитных реле равно четырём. Для данного количества реле необходимо использовать четыре выхода микроконтроллера, которые будут выдавать логическую единицу, когда источник света должен быть в положение выключен и логический ноль для положения включен. Необходимо продумать логику включения источника света. Она будет базироваться на показании двух датчиков: датчик уличной освещенности и датчик движения в конкретном помещении. Датчик уровня уличной освещенности необходим для того, чтобы днём при солнечном свете, источники света не включались и начинали работать при определенном пороге освещенности. В качестве датчика уличной освещенности, используется фоторезистор. Для правильной работы системы его необходимо первоначально откалибровать. Датчик движения должен реагировать на движения человека в помещении, и выдавать логическую единицу с удержанием на определенное время задержки. Время задержки, является основным параметром продолжительности, включения источника света. PIR датчик на основе инфракрасного сенсора, очень часто используется как в системах сигнализации, так и в автоматизации освещения. Эти датчики малые по габаритам, недорогие, потребляют мало энергии, легки в эксплуатации, практически не подвержены износу. Датчики движения должны быть широкоугольные, на основе нескольких элементов для исключения слепых зон.

Возможно несколько вариантов работы этого датчика:

1.При обнаружении движения, датчик выдаёт логическую единицу, при повторном обнаружении единица будет изменена на ноль и вновь на единицу, тем самым сбрасывая таймер задержки.

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

Задержка выдаваемого сигнала настраивается непосредственно на самом датчике. Для более сглаженной работы системы, необходимо использовать второй вариант использования датчика движения.

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

Автоматическое управление оконными занавесками

Механизированные оконные занавески, позволяют контролировать уровень солнечного света, который проникает из окна в помещение, в автоматическом, заранее заданном режиме. Изменение положения занавесок, в некоторых моделях, осуществляется при помощи шагового двигателя.

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

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

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

Управление должно быть реализовано как автоматически, так и в ручном режиме при помощи центрального пульта или дистанционного радио пульта.

Данная система предполагает параллельное управление всеми механизированными оконными занавесками.

Система обнаружения протечки воды

Одна из систем обеспечения безопасности от внутренних угроз - система обнаружения протечки воды. Своевременное обнаружение протечки и перекрытие подводящих трубопроводных кранов позволит избежать серьёзных последствий. На данный момент на рынке представлены специализированные механизированные трубопроводные шаровые краны с сервоприводом. Шаровой кран является наиболее современным типом запирающей арматуры. Внедрение сервопривода позволило использовать его в автоматизированных системах. Так как на сервоприводе отсутствует свой контроллер, ему необходимо подавать логический ноль до тех пор, пока не сработает концевик крайнего положения и не отключит его. В самом сервоприводе присутствует электромагнитное реле с гальванической развязкой.

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

Необходимо реализовать возможность отключения данного режима с главного пульта и оповещения.

Дистанционный радио пульт

Необходимо реализовать возможность дистанционного управления некоторыми функциями системы в ручном режиме: отключить систему автоматического управления светом, отключить автоматическое управление механизированными занавескам.


Подобные документы

  • Сущность информации, ее классификация. Основные проблемы обеспечения и угрозы информационной безопасности предприятия. Анализ рисков и принципы информационной безопасности предприятия. Разработка комплекса мер по обеспечению информационной безопасности.

    курсовая работа [28,2 K], добавлен 17.05.2016

  • Модель обеспечения информационной безопасности в сфере обороны РФ. Оценка состояния систем защиты информации в правоохранительной и судебной сферах, рекомендации по их обеспечению. Анализ угроз информационной безопасности России и рисков от их реализации.

    курсовая работа [57,4 K], добавлен 13.11.2009

  • Анализ инфраструктуры ООО магазин "Стиль". Создание системы информационной безопасности отдела бухгалтерии предприятия на основе ее предпроектного обследования. Разработка концепции, политики информационной безопасности и выбор решений по ее обеспечению.

    курсовая работа [2,2 M], добавлен 17.09.2010

  • Проектирование системы управления базами данных. Особенности реализации в MS SQL. Разработка пользовательского интерфейса. Тестирование и отладка приложения. Руководство пользователя и системного администратора. Анализ и методы разработки приложений.

    курсовая работа [867,9 K], добавлен 16.07.2013

  • Категории действий, способных нанести вред информационной безопасности, методы её обеспечения. Сфера деятельности фирмы и анализ финансовых показателей. Система информационной безопасности фирмы и разработка комплекса мероприятий по её модернизации.

    дипломная работа [1,1 M], добавлен 15.09.2012

  • Понятие и основные задачи информационной безопасности. Разработка и реализация политики ИБ в компании Microsoft. Виды угроз безопасности. Современные средства физической, аппаратной, программной защиты информации в локальном домашнем и офисном компьютере.

    курсовая работа [107,6 K], добавлен 09.04.2014

  • Правовое регулирование защиты персональных данных. Общий принцип построения соответствующей системы. Разработка основных положений по охране личных документов. Подбор требований по обеспечению безопасности персональных данных в информационных системах.

    дипломная работа [1,3 M], добавлен 01.07.2011

  • Цель, критерии и ограничения создания автоматизированной системы. Разработка элементов информационного обеспечения информационной системы общежития. Рекомендации по выбору комплекса технических средств для автоматизации задачи учета реализации товара.

    курсовая работа [920,8 K], добавлен 11.11.2022

  • Обзор требований проблемной области. Особенности управления задачами. Исполнительные системы реального времени. Программирование на уровне микропроцессоров. Модели и методы предметной области. Реализация прототипа системы реального времени.

    курсовая работа [263,1 K], добавлен 15.02.2005

  • Использование операционных систем. Контрольно-испытательные методы анализа безопасности программного обеспечения. Логико-аналитические методы контроля безопасности программ и оценка технологической безопасности программ на базе метода Нельсона.

    контрольная работа [22,6 K], добавлен 04.06.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.