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

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

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

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

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

AVR Studio - интегрированная среда разработки (IDE) для разработки 8 и 32 битных AVR приложений от фирмы Atmel, функционирующая в операционных системах Windows NT/2000/XP/Vista/7/10. AVR Studio имеет компилятор C/C++ и симулятор, позволяющий проследить выполнение программы. Нынешняя модификация поддерживает все выпускаемые в настоящий период контроллеры AVR и средства разработки. AVR Studio включает в себя менеджер проектов, редактор исходного кода, инструменты виртуальной симуляции и внутрисхемной отладки, дает возможность писать программы на ассемблере либо на C/C++.

Подобранный контроллер без аппаратной поддержки USB, следовательно, необходимо программно эмулировать интерфейс USB, для этого будем использовать программную библиотеку V-USB. Здесь появляется проблема в производительности нашего микроконтроллера. Скорость USB весьма большая: LowSpeed - 1.5 Мбит/с, FullSpeed - 12 Мбит/с, HighSpeed - 480 Мбит/с. Вследствии этого станем использовать LowSpeed USB. Однако даже данной скорости будет достаточно, для работы системы.

Основные преимущества использования V-USB:

полная эмуляция USB 1.1 low-speed устройств за исключением обработки ошибок связи и электрических характеристик;

запускается практически на всех AVR-ках, нужно минимум 2 килобайта флеша, 128 байт RAM и частота не меньше 12 МГц;

V-USB предоставляет свободную пару идентификаторов (Vendor-ID и Product-ID);

Для драйвера для микропроцессора необходимо создать проект в среде AVR Studio. Создание нового проекта показано на рисунке 4.1. также необходимо настроить частоту работы микроконтроллера, совместимую с работой эмулятора V?USB. Определение частоты показано на рисунке 4.2.

Рисунок 4.1 - Создание нового проекта

Ассемблерные части V-USB написаны с поддержкой исключительно этих частот: 12 МГц, 12.8 МГц, 15 МГц, 16 МГц, 16.5 МГц, 18 МГц и 20 МГц. Прочие не поддерживаются. Частоту следует определить в настройках проекта AVR Studio: Project->Configuration Options->вкладка General->поле Frequency, в Герцах, для 12 МГц добавляем приставку мега = 12000000, в противном случае не сможете грамотно скомпилировать программу (студия формирует define F_CPU для компилятора, который доступный всему проекту, V-USB как раз применяет его).

Далее в каталог проекта необходимо скопировать все файлы библиотеки V-USB. Затем добавляем к проекту такие файлы:

? usbdrvasm.S;

Рисунок 4.2 - Определение частоты

Рисунок 4.3 - Добавление файлов

? usbdrv.c;

? oddebug.c.

Теперь верно настроим usbconfig.h и кроме того поместим в каталог с проектом.

Рисунок 4.4 - Настройка файла usbconfig.h

Устройство класса HID может обмениваться с хостом блоками данных фиксированного размера - репортами, их структура описывается в HID дескрипторе который устройство предоставляет хосту при подключении. USB линия данных D+ подключена к прерыванию INT0 (оно с наивысшим приоритетом). Когда будет происходить обмен данными по USB, микроконтроллер постоянно будет уходить на обработку INT0, на котором висит V-USB. И только потом управление отдадут основной программе. Если нужно использовать свои прерывания, то сразу же ставим глобальный флаг прерываний I командой sei(), чтобы при запросах от хоста могло сработать INT0 для правильной работы V-USB.

Функция usbPoll(), которую следует вызывать не реже чем 50 мс - информирует хост, что наше устройство в покрышке USB готово к работе. В случае если это не соблюдать, то Windows напишет «Подключено незнакомое устройство». 50 мс - это USB timeout for accepting a Setup message (это специализированные указания хоста, в нашем случае - HID_SET_REPORT и HID_GET_REPORT). Setup оповещениями занимается функция usbFunctionSetup.

Для передачи данных создадим структуру, так намного удобней/гибче для собственных переделок чем просто массив. Дескриптор имеет только один вид репорта, размер которого 8 бит (REPORT_SIZE), количество равняется размеру передаваемой структуры (REPORT_COUNT). Таким образом будем передавать данные порциями по 8 бит. Надо только помнить что V-USB поддерживает прием/передачу до 254 байт данных. Если хотим больше, тогда в usbconfig.h ставим define USB_CFG_LONG_TRANSFERS в 1, при этом возрастет размер самого драйвера.

Как было сказано выше, весь процесс приема/передачи данных внутри МК берут на себя функции usbFunctionRead(uchar *data, uchar len) и usbFunctionWrite(uchar *data, uchar len). Заполнять саму структуру данными не обязательно внутри этих же функций, этим могут заниматься другие участки кода (например прерывания, но тогда структуру обьявляем как volatile). Параметр *data - это указатель на буфер V-USB, где нужно прочитать/записать данные размером len. Максимальный размер этого буфера - 1 байт (uchar) и это значение = размеру нашего репорта.

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

Запись uchar *buffer = (uchar*)&pdata; означает следующее: pdata - наша структура, &pdata - адрес начала нашей структуры в памяти, (uchar*)&pdata - явное приведение типа (uchar* - указатель на данные типа uchar). Таким способом просто обьявляем указатель uchar *buffer на место в памяти где хранится наша структура.

Листинг программы в файле main.c приведен в приложении Б.

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

Proteus Professional - пакет программ для автоматизированного проектирования электронных схем. Пакет представляет собой систему схемотехнического моделирования, базирующуюся на основе моделей электронных компонентов принятых в PSpice. Отличительной чертой пакета Proteus Professional является возможность моделирования работы программируемых устройств: микроконтроллеров, микропроцессоров, DSP и прочее. Дополнительно в пакет Proteus Professional входит система проектирования печатных плат. Proteus Professional может симулировать работу следующих микроконтроллеров: 8051, ARM7,ARM Cortex-M3, AVR, Texas Instruments, Motorola, PIC, Basic Stamp. Библиотека компонентов содержит справочные данные.

Для моделирования соберем схему, используя библиотеки элементов. Библиотека приведена на рисунке 4.5.

Рисунок 4.5 - Библиотека элементов

Далее необходимо собрать схему подключения микропроцессора через интерфейс USB к компьютеру. Схема представлена на рисунке 4.6. ATmega8 подключена классически с пяти вольтовым питанием. В USB уровень сигнала на линиях D+ и D- составляет 3.3 вольта, а схему подключили к 5 вольтам, поэтому для согласования установлены стабилитроны D1 и D2, которые уменьшают сигнал с микроконтроллера на гасящих резисторах R3, R4 до уровня необходимого по стандарту. Для определения версии протокола в схеме задействован делитель напряжения на резисторах R1 и R2 который обеспечивает 3.4 вольта для D- на холостом ходу. Если вместо резистора R1 2,2K поставить R1 номиналом 1,5K, то вместо 3,4 вольта мы получим 3.7 вольта, что в свою очередь откроет стабилитрон D1 который уменьшит его до напряжения его открывания (от 3.4 до 3.5 В). И в результате получится перекос по току в режиме холостого хода (D2 не нагружен совсем, а по D1 уже течет ток) что будет сказываться на длинных проводах USB. Сопротивления R3 и R4 рассчитываются по току и для данной схемы равны 68 Ом.

Когда будет происходить обмен данными по USB, микроконтроллер постоянно будет уходить на обработку INT0, на котором висит V-USB. И только потом управление отдадут основной программе. Если нужно использовать свои прерывания, то сразу же ставим глобальный флаг прерываний I командой sei(), чтобы при запросах от хоста могло сработать INT0 для правильной работы V-USB.

Рисунок 4.6 - Схема в Proteus

Чтобы моделирование удалось нужно установить драйвера виртуального интерфейса USB. Они находятся в меню Пуск в папке с Proteus, как показано на рисунке 4.7.

Рисунок 4.7 - Установка драйвера

После установки драйвера необходимо загрузить прошивку в микроконтроллер и можно запускать моделирование. Процесс загрузки прошивки показан на рисунке 4.8. Схема после запуска представлена на рисунке 4.9. На этом рисунке видно, что идет передача данных по трем портам.

Рисунок 4.8 - Загрузка прошивки

Рисунок 4.9 - Запущенное моделирование

Рисунок 4.10 - USB Analizator

При начале моделирования возникает окошко USB Analizator. Оно демонстрирует, правильно ли функционирует интерфейс. В случае если все поля зеленые - то интерфейс функционирует правильно.

5. Установка системы на предприятии

5.1 Элементы внедряемой системы

Элементы системы расположены на всех объектах предприятия изнутри и снаружи. Элементы размещены на значительном расстоянии друг от друга. Следовательно, для обеспечения надежности необходимо использовать надежные линии связи. В данной работе используется кабель вида витая пара UTP категории 5е. Характеристики кабеля приведены в таблице 5.1

Таблица 5.1 - Характеристики кабеля UTP 5e

Характеристика

Значение

Сопротивление, Ом/км

96

Взаимная емкость, пФ/м

50

Ассиметрия сопротивления, %

3

Сопротивление изоляции, Мом на км

Больше 10000

Частотная характеристика сопротивления, Ом

100±15

Скорость передачи, %

66

Температурный режим, градусов С

От минус 20 до плюс 60

Система оповещения обязана быть размещена таким (образом, чтобы охватить всю территорию предприятия. Следует расположить во всех зданиях датчики пожара, в участках, где может быть подтопление измерители затопления, в участках, где нежелательно проникновение посторонних, там датчики движения. В качестве пожарного датчика используется датчик ДИП-45, представлен на рисунке 5.1, схема включения на рисунке 5.2, характеристики приведены в таблице 5.2.

В качестве датчика затопления используется датчик DEGA Zc II, показан на рисунке 5.3, характеристики приведены в таблице 5.3.

Рисунок 5.1 - Датчик ДИП- 45

Рисунок 5.2 - Схема подключения датчика

Таблица 5.2- Характеристики датчика ДИП-45

Характеристика

Значение

Чувствительность извещателя, дБ/м

От 0,05 до 0,2

Напряжение питания, В

От 9 до 30

Ток потребления в дежурном режиме, мА

не более 0,045

Инерционность срабатывания, с

не более 9

Допустимый уровень воздействия фоновой освещенности, лк

12000

Допустимая скорость воздушного потока, м/с

до 10

Помехоустойчивость к наносекундным импульсам напряжения

3 степень

Помехоустойчивость к электростатическому разряду

3 степень

Помехоустойчивость к электромагнитному полю

3 степень

Способ защиты от поражения электрическим током

3 класс

Степень защиты оболочки извещателя

IP 30

Габаритные размеры, диаметр мм

93х46

Вес извещателя, г

210

Максимальная относительная влажность, %

93±1

Диапазон рабочих температур, градусов С

От минус 45 до плюс 55

Средний срок службы

не менее 10 лет

Рисунок 5.3 - Датчик затопления

Таблица 5.3 - Характеристики датчика затопления

Характеристика

Значение

Напряжение питания, В

12

Кабель питания

UTP cat5e

Выход

Выходное напряжение

Рабочие среды

BNV(невзрывоопасная среда)

Степень защиты

IP20

Размеры, мм

35x55x25

Вес, г

100

Диапазон рабочих температур, градусов С

От минус 45 до плюс 55

В качестве датчика движения будем использовать датчик IEK ДД 008, показан на рисунке 5.4, характеристики которого приведены в таблице 5.4.

Рисунок 5.4 - Датчик движения

Таблица 5.4 - Характеристики датчика движения IEK ДД 008

Характеристика

Значение

Угол обнаружения, градусов

180

Максимальная подключаемая мощность, Вт

1100

Радиус действия, м

12

Вес, кг

0,212

Мощность, Вт

0,45

Так же нам необходим промышленный термометр, для анализа изменения температур. В нашей системе мы будем использовать термометр RPTF 2, представленный на рисунке 5.5. Термометр сопротивления RPTF 2 с пассивным выходом, служащий для измерения температуры в больших помещениях и залах, например - в качестве датчика темного излучения. Датчик температуры RPTF 2 (шаровой термометр) определяет действующую составляющую излучения, а также эффективную лучистую теплоту в точке измерения. Благодаря используемому в датчике маятникового типа методу измерения и его размещению достигаются очень хорошие результаты с высокой репрезентативностью для всего помещения. Для учета теплового излучения и оценки степени температурного комфорта (оперативной температуры в помещении) определяется «шаровая» температура (Globe temperature). Оперативная температура в помещении описывает суммарное действие теплового излучения и тепловой конвекции (отношение «шаровой» температуры к температуре воздуха - прибл. 70% к 30%).

Рисунок 5.5- Термометр

Для измерения относительной влажности воздуха будем применять датчик SH Z51P5-31P-LZ. Датчик SH Z51P5-31P-LZ предназначен для контроля и непрерывного преобразования относительной влажности воздуха в аналоговый выходной сигнал напряжения постоянного тока.

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

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

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

Рисунок 5.6 - Измерительный преобразователь относительной влажности

5.2 Расчет количества необходимых элементов

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

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

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

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

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

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

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

Расчет числа датчиков и длины требуемых линий связи приведен в таблице 5.5.

Таблица 5.5 - Необходимое число элементов системы

Наименование

Количество

Кабель UTP 5e, м

168793,75

Пожарный датчик, шт

61

Датчик затопления, шт

6

Датчик движения, шт

32

Громкоговоритель, шт

8

Датчик влажности, шт

19

Термометр, шт

19

Рисунок 5.7 - Схема расположения датчиков и линий связи на объекте: 1- формовочный цех; 2 - арматурный цех; 3 - бетоносмесительный узел; 4 - административный корпус; 5 - склад арматурной стали; 6 - склад готовой продукции; 7 - склад цемента; 8 - склад наполнителей; 9 - галерея подачи наполнителей; 10 - компрессионная; 11- трансформаторная подстанция; 12 - склад добавок для бетона; 13- котельная; 14 - градирня; 15 - точечные посты разгрузки заполнителей; 16 - пост разгрузки цемента; 17 - автостоянка; 18 - КПП; 19 - склад ГСМ.

Рисунок 5.8 - Условные обозначения

6. Интерфейс

Весь интерфейс будет реализован в вебе, на фреймворке Laravel.

Laravel - бесплатный веб-фреймворк с открытым кодом, предназначенный для разработки с использованием архитектурной модели MVC.

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

Laravel это PHP 5.4 фреймворк, который описывает себя как "Фреймворк для Веб мастеров". По мнению его автора, Тейлора (Taylor Otwell), Laravel старается доставить радость от программирования. Он прост, элегантен и что очень важно - хорошо документирован:

простой - функционал Laravel является простым для понимания и использования;

элегантный - большинство функций Laravel превосходно работают, не требуя дополнительной настройки. Опираются на общепринятые стандарты написания кода, делая его интуитивно понятным;

документация - документация Laravel закончена, и постоянно обновляется.

Идея, которая лежит в основе конструкционного шаблона MVC, очень проста: нужно четко разделять ответственность за различное функционирование в наших приложениях:

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

Контроллер (Controller) управляет запросами пользователя (получаемые в виде запросов HTTP GET или POST, когда пользователь нажимает на элементы интерфейса для выполнения различных действий). Его основная функция - вызывать и координировать действие необходимых ресурсов и объектов, нужных для выполнения действий, задаваемых пользователем. Обычно контроллер вызывает соответствующую модель для задачи и выбирает подходящий вид.

Модель (Model) - это данные и правила, которые используются для работы с данными, которые представляют концепцию управления приложением. В любом приложении вся структура моделируется как данные, которые обрабатываются определенным образом. Что такое пользователь для приложения - сообщение или книга? Только данные, которые должны быть обработаны в соответствии с правилами (дата не может указывать в будущее, e-mail должен быть в определенном формате, имя не может быть длиннее Х символов, и так далее).

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

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

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

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

Для начала диспетчеру нужно будет зарегестрироваться в нашем сервисе. Форма регистрации является стандартной.

Рисунок 6.1 - Форма регистрации

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

Рисунок 6.2 - Форма авторизации

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

Графики являются интерактивными, это означает, что при наведении на узловые точки появляется pop-up сообщение с уточняющей информацией о данном моменте времени.

Рисунок 6.3 - Рабочая область

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

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

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

Наше веб-приложение разделено на две части: часть для диспетчера и часть для рабочих. До этого была описана только диспетчерская часть, теперь же рассмотрим часть для рабочих.

Рисунок 6.4 - Отображение веб-приложения с телефона

Рисунок 6.5 - Постановка задачи

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

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

public function index()

{

$tasks = Task::where('user_id', Auth::user()->name)

->paginate(4);

return view(('tasks.index'), compact(['tasks',]));

}

Рисунок 6.6 - Список задач

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

Заключение

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

В процессе выполнения выпускной квалификационной работы было осуществлено:

- исследование построения современных систем оповещения;

- создание структурной схемы системы оповещения;

- создание принципиальной схемы приемника;

- схемотехническое моделирование в пакете Proteus;

- моделирование работы электронной схемы приемника в Multisim;

- разработка принципиальной схемы передатчика;

- размещение элементов системы на территории предприятия;

- разработан интерфейс на современном php фреймворке Laravel.

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

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

1. Акимов В.А. Методические рекомендации по созданию в районах размещения потенциально опасных объектов локальных систем оповещения на базе комплекса программно-аппаратных средств оповещения «Марс-Арсенал» / В.А. Акимов, Э.Н. Чижиков: Москва, 2010. 22 с.

2. Прайс-лист фирмы Inter M

3. Прайс-лист фирмы Аргусспектр

4. 8-bit Atmel with 8KBytes InSystem Programmable Flash/Atmel:Сан-Хосе, 2013. 5 с.

5. Егоров Е.Н. Применение программного прикладного пакета Multisim для моделирования радиофизических схем/ Е.Н. Егоров, И.С. Ремпен, А.А. Короновский, А.Е. Храмов: Саратов, 2010. 26 с.

6. СТП ОмГУПС-1.2-2005. Работы студенческие учебные и выпускные квалификационные: общие требования и правила оформления текстовых документов.

7. Электроника для всех

8. Сайт паяльник

Приложение А

Графический материал

Рисунок А.1 - Современная система оповещения

Рисунок А.2 - Структурная схема

Рисунок А.3 - Представление графиков

Рисунок А.4 - Постановка и отображения задач

телеуправление микроконтроллер интерфейс приемник

Рисунок А.5 - Веб-интерфейс

Рисунок А.6 - Распределение элементов системы оповещения на территории предприятия: 1- формовочный цех; 2 - арматурный цех; 3 - бетоносмесительный узел; 4 - административный корпус; 5 - склад арматурной стали; 6 - склад готовой продукции; 7 - склад цемента; 8 - склад наполнителей; 9 - галерея подачи наполнителей; 10 - компрессионная; 11- трансформаторная подстанция; 12 - склад добавок для бетона; 13- котельная; 14 - градирня; 15 - точечные посты разгрузки заполнителей; 16 - пост разгрузки цемента; 17 - автостоянка; 18 - КПП; 19 - склад ГСМ.

Приложение Б

Листинг программы

TaskController:

class TaskController extends Controller

{

/**

* Display a listing of the resource.

*

* @return \Illuminate\Http\Response

*/

public function index()

{

$tasks = Task::where('user_id', Auth::user()->name)->paginate(4);

return view(('index'), compact(['tasks',]));

}

/**

* Show the form for creating a new resource.

* @return \Illuminate\Http\Response

*/

public function create()

{

return view('taskCreate');

}

/**

* Store a newly created resource in storage.

* @param \Illuminate\Http\Request $request

* @return \Illuminate\Http\Response

*/

public function store(Request $request)

{

$task = new Task;

$task->user_id = $request-> user_id;

$task->location = $request-> location;

$task->dop_inf = $request->dop_inf;

$task->save();

Session::flash('success', 'Задача создана!');

return redirect()-> route('user', $task->id);

}

/**

* Display the specified resource.

* @param int $id

* @return \Illuminate\Http\Response

*/

public function show($id)

{

$task = Task::find($id);

return view('user')->with('task', $task);

}

public function destroy($id)

{

$task = Task::find($id);

$task->delete();

Session::flash('success', 'Удалено');

return redirect()->route('admin');

}

}

main.c:

#include <avr/io.h>

#include <avr/interrupt.h>

#include <util/delay.h>

#include <avr/pgmspace.h>

#include "usbdrv.h"

struct dataexchange_t

{

uchar a1;

uchar a2;

uchar a3;

};

struct dataexchange_t pdata = {0, 0, 0};

PROGMEM char usbHidReportDescriptor[22] = {

0x06, 0x00, 0xff,

0x09, 0x01,

0xa1, 0x01,

0x15, 0x00,

0x26, 0xff, 0x00,

0x75, 0x08,

0x95, sizeof(struct dataexchange_t),

0x09, 0x00,

0xa2, 0x02, 0x01,

0xc0

};

static uchar currentAddress;

static uchar bytesRemaining;

uchar usbFunctionRead(uchar *data, uchar len)

{

if(len > bytesRemaining)

len = bytesRemaining;

uchar *buffer = (uchar*)&pdata;

if(!currentAddress)

{

if ( PINB & _BV(1) )

pdata.a1 = 1;

else

pdata.a1 = 0;

if ( PINB & _BV(2) )

pdata.a2 = 1;

else

pdata.a2 = 0;

if ( PINB & _BV(3) )

pdata.a3 = 1;

else

pdata.a3 = 0;

}

uchar j;

for(j=0; j<len; j++)

data[j] = buffer[j+currentAddress];

currentAddress += len;

bytesRemaining -= len;

return len;

}

uchar usbFunctionWrite(uchar *data, uchar len)

{

if(bytesRemaining == 0)

return 1;

if(len > bytesRemaining)

len = bytesRemaining;

uchar *buffer = (uchar*)&pdata;

uchar j;

for(j=0; j<len; j++)

buffer[j+currentAddress] = data[j];

currentAddress += len;

bytesRemaining -= len;

if(bytesRemaining == 0)

{

if ( pdata.a1 )

PORTB |= _BV(1);

else

PORTB &= ~_BV(1);

if ( pdata.a2 )

PORTB |= _BV(2);

else

PORTB &= ~_BV(2);

if ( pdata.a3 )

PORTB |= _BV(3);

else

PORTB &= ~_BV(3);

}

return bytesRemaining == 0;

}

usbMsgLen_t usbFunctionSetup(uchar data[8])

{

usbRequest_t *rq = (void *)data;

if((rq->bmRequestType & USBRQ_TYPE_MASK) == USBRQ_TYPE_CLASS){

if(rq->bRequest == USBRQ_HID_GET_REPORT){

bytesRemaining = sizeof(struct dataexchange_t);

currentAddress = 0;

return USB_NO_MSG;

}else if(rq->bRequest == USBRQ_HID_SET_REPORT){

bytesRemaining = sizeof(struct dataexchange_t);

currentAddress = 0;

return USB_NO_MSG;

}

}else{

}

return 0;

}

int main(void)

{

DDRB = 0b00001110;

usbInit();

usbDeviceDisconnect

uchar i = 0;

while(--i){

_delay_ms(1);

}

usbDeviceConnect();

sei();

for(;;){

usbPoll();

}

return 0;

}

Размещено на Allbest.ru

...

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

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