Контроллер управления светофором

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    277,59 Кб
  • Опубликовано:
    2015-03-21
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Контроллер управления светофором

Министерство образования и науки Российской Федерации

Федеральное государственное автономное образовательное учреждение высшего профессионального образования

Санкт-Петербургский государственный университет аэрокосмического приборостроения

КАФЕДРА №43




ПОЯСНИТЕЛЬНАЯ ЗАПИСКА К КУРСОВОЙ РАБОТЕ

по дисциплине: Операционные системы реального времени

Тема:

Контроллер управления светофором



Работу выполнила

А.А. Свиридова

Студентка группы 4136





Санкт-Петербург - 2015

РЕФЕРАТ

Пояснительная записка к курсовой работе содержит 26 страниц, 9 рисунков, 1 приложение. Использовано 9 источников.

Ключевые слова: контроллер управления светофором, QNX, photon applicaton builder

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

Целью работы является разработка приложения, имитирующего работу контроллера управления светофором.

В результате выполнения курсовой работы:

·  было проведено знакомство с QNX 6.5;

·        были изучены графические возможности Photon Application Builder;

·        были освоены возможности виртуальной машины VMW player;

·        было улучшено понимание принципов работы ОСРВ.


СОДЕРЖАНИЕ

ВВЕДЕНИЕ

1. Анализ задачи

2. Установка QNX 6.5 на виртуальную машину

3. Разработка приложения

3.1 Описание виджетов

3.2 Разработка GUI

3.3 Разработка алгоритма функционирования программы

3.4 Демонстрация работы приложения

ЗАКЛЮЧЕНИЕ

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

ПРИЛОЖЕНИЕ

Введение


Система реального времени (СРВ) - это система <https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0>, которая должна реагировать на события во внешней по отношению к системе среде или воздействовать на среду в рамках требуемых временных ограничений [4]. Оксфордский словарь английского языка <https://ru.wikipedia.org/wiki/%D0%9E%D0%BA%D1%81%D1%84%D0%BE%D1%80%D0%B4%D1%81%D0%BA%D0%B8%D0%B9_%D1%81%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C_%D0%B0%D0%BD%D0%B3%D0%BB%D0%B8%D0%B9%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0> говорит о СРВ как о системе, для которой важно время получения результата [3]. Другими словами, обработка информации системой должна производиться за определённый конечный период времени, чтобы поддерживать постоянное и своевременное взаимодействие со средой. Естественно, что масштаб времени контролирующей системы и контролируемой ей среды должен совпадать.

Под реальным временем понимается количественная характеристика, которая может быть измерена реальными физическими часами <https://ru.wikipedia.org/wiki/%D0%A7%D0%B0%D1%81%D1%8B>, в отличие от логического времени, определяющего лишь качественную характеристику, выражаемую относительным порядком следования событий [2]. Говорят, что система работает в режиме реального времени, если для описания работы этой системы требуются количественные временны́е характеристики [1].

QNX - POSIX <https://ru.wikipedia.org/wiki/POSIX>-совместимая операционная система реального времени <https://ru.wikipedia.org/wiki/%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%80%D0%B5%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B8>, предназначенная преимущественно для встраиваемых систем <https://ru.wikipedia.org/wiki/%D0%92%D1%81%D1%82%D1%80%D0%B0%D0%B8%D0%B2%D0%B0%D0%B5%D0%BC%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0> [4]. Считается одной из лучших реализаций концепции микроядерных <https://ru.wikipedia.org/wiki/%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D1%8F%D0%B4%D1%80%D0%BE> операционных систем <https://ru.wikipedia.org/wiki/%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0>.

Как микроядерная <https://ru.wikipedia.org/wiki/%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D1%8F%D0%B4%D1%80%D0%BE> операционная система, QNX основана на идее работы основной части своих компонентов, как небольших задач, называемых сервисами. Это отличает её от традиционных монолитных ядер <https://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%BD%D0%BE%D0%BB%D0%B8%D1%82%D0%BD%D0%BE%D0%B5_%D1%8F%D0%B4%D1%80%D0%BE>, в которых ядро операционной системы - одна большая программа, состоящая из большого количества «частей», каждая со своими особенностями. Использование микроядра в QNX позволяет пользователям (разработчикам) отключить любую ненужную им функциональность, не изменяя ядро. Для этого можно просто не запускать определённый процесс.

Система достаточно небольшая, чтобы в минимальной комплектации уместиться на одну дискету <https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BA%D0%B5%D1%82%D0%B0>, вместе с этим она считается очень быстрой и должным образом «законченной» (практически не содержащей ошибок).Neutrino, выпущенная в 2001 году, перенесена на многие платформы, и сейчас способна работать практически на любом современном процессоре <https://ru.wikipedia.org/wiki/%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80>, используемом на рынке встраиваемых систем. Среди этих платформ присутствуют семейства x86 <https://ru.wikipedia.org/wiki/X86>, MIPS <https://ru.wikipedia.org/wiki/MIPS_(%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0)>, PowerPC <https://ru.wikipedia.org/wiki/PowerPC>, а также специализированные семейства процессоров, такие, как SH-4 <https://ru.wikipedia.org/wiki/SuperH>,ARM <https://ru.wikipedia.org/wiki/ARM_(%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0)>, Strong ARM <https://ru.wikipedia.org/wiki/StrongARM> и xScale <https://ru.wikipedia.org/wiki/XScale>.

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

На сегодняшний день единственным ограничением на широкое использование QNX является высокая стоимость лицензии и сильная зависимость от QNX Software Systems в плане лицензирования разработанного программного обеспечения. Но, тем не менее, она занимает лидирующую позицию среди ОС реального времени на платформе ПК <https://ru.wikipedia.org/wiki/IBM_PC-%D1%81%D0%BE%D0%B2%D0%BC%D0%B5%D1%81%D1%82%D0%B8%D0%BC%D1%8B%D0%B9_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80>.Systems <https://ru.wikipedia.org/wiki/Cisco_Systems> использует оптимизированную версию микроядра QNX Neutrino в программном обеспечении IOS XR <https://ru.wikipedia.org/wiki/IOS_XR>. Программный пакет IOS XR <https://ru.wikipedia.org/wiki/IOS_XR> предназначен для управления коммутаторами Cisco CRS-1, обеспечивает непрерывный режим работы и поддерживает развитые функции управления терабитными коммутаторами <https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D1%82%D0%B5%D0%B2%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BC%D0%BC%D1%83%D1%82%D0%B0%D1%82%D0%BE%D1%80> с распределённой архитектурой.

На март 2009 года решения на базе QNX лицензированы для использования на более чем 10,1 миллионах единиц техники от практически всех ведущих производителей автомобилей, включая BMW, Chrysler <https://ru.wikipedia.org/wiki/Chrysler>, Daimler <https://ru.wikipedia.org/wiki/Daimler>, Fiat <https://ru.wikipedia.org/wiki/Fiat>, Ford <https://ru.wikipedia.org/wiki/Ford>, General Motors <https://ru.wikipedia.org/wiki/General_Motors>, Honda <https://ru.wikipedia.org/wiki/Honda>, Hyundai <https://ru.wikipedia.org/wiki/Hyundai_Motor>, Mazda <https://ru.wikipedia.org/wiki/Mazda>, Mitsubishi <https://ru.wikipedia.org/wiki/Mitsubishi>, Nissan <https://ru.wikipedia.org/wiki/Nissan>, Saab <https://ru.wikipedia.org/wiki/Saab_AB>, SsangYong <https://ru.wikipedia.org/wiki/SsangYong_Motor_Company>, Toyota <https://ru.wikipedia.org/wiki/Toyota> иVolkswagen <https://ru.wikipedia.org/wiki/Volkswagen>. В частности, такие автомобили выпускаются под марками Acura <https://ru.wikipedia.org/wiki/Acura>, Alfa Romeo <https://ru.wikipedia.org/wiki/Alfa_Romeo>, Audi <https://ru.wikipedia.org/wiki/Audi>, Buick <https://ru.wikipedia.org/wiki/Buick>, Cadillac <https://ru.wikipedia.org/wiki/Cadillac>, Chevrolet <https://ru.wikipedia.org/wiki/Chevrolet>, Dodge <https://ru.wikipedia.org/wiki/Dodge>, Honda <https://ru.wikipedia.org/wiki/Honda>, Hummer <https://ru.wikipedia.org/wiki/Hummer>, Infiniti <https://ru.wikipedia.org/wiki/Infiniti>, Jeep <https://ru.wikipedia.org/wiki/Jeep>,Lancia <https://ru.wikipedia.org/wiki/Lancia>, Mini <https://ru.wikipedia.org/wiki/Mini>, Mercedes <https://ru.wikipedia.org/wiki/Mercedes-Benz>, Opel <https://ru.wikipedia.org/wiki/Opel>, Pontiac <https://ru.wikipedia.org/wiki/Pontiac>, Saturn <https://ru.wikipedia.org/w/index.php?title=%D0%A1%D0%B0%D1%82%D1%83%D1%80%D0%BD_(%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%BE%D0%B1%D0%B8%D0%BB%D1%8C)&action=edit&redlink=1> и другими.

Используется для управления роботом BigDog <https://ru.wikipedia.org/wiki/BigDog> [5].

Наиболее крупными конкурентами QNX являются VxWorks, OS-9 <https://ru.wikipedia.org/wiki/OS-9>, Integrity <https://ru.wikipedia.org/wiki/Integrity_(%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0)>, LynxOS <https://ru.wikipedia.org/wiki/LynxOS>, minix3(Под лицензией BSD), а также некоторые ОС на ядре Linux <https://ru.wikipedia.org/wiki/%D0%AF%D0%B4%D1%80%D0%BE_Linux> (RTLinux <https://ru.wikipedia.org/wiki/RTLinux> и др.) [6].

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


1. Анализ задачи


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

Для автомобилей:

·  светофор горит зеленым, если движение разрешено;

·        светофор горит желтым, если перестал гореть зеленый свет и скоро загорится красный;

·        светофор горит красным, если движение запрещено и сейчас разрешено для пешеходов;

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

Для пешеходов:

·  горит зеленый, если движение разрешено;

·        зеленый мигает, если движение скоро будет запрещено;

·        горит красный, если движение запрещено.

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

Для разработки приложения была выбрана встроенная среда разработки системы QNX-Photon Application Builder по следующим причинам:

·  Photon Application Builder не требует дополнительной установки и является полностью встроенным в систему QNX 6.5;

·  Photon Application Builder имеет интуитивно понятный интерфейс, позволяющий легко и быстро разрабатывать приложения для ОСРВ;

·        Photon Application Builder встроен в ОСРВ QNX, которая работает при небольших ресурсных затратах на виртуальной машине, не вызывая никаких задержек в системе, что позволяет работать в Photon Application Builder не испытывая трудностей с виртуальной машиной;

·        ОСРВ QNX имеет простую установку на виртуальную машину, и не имеет никаких проблем с переносом данных из основной системы в виртуальную, а так же с подключением к интернету, что позволяет разрабатывать приложения на Photon Application Buider не переходя в основную систему.

2. Установка QNX 6.5 на виртуальную машину


Для того, чтобы установить ОСРВ QNXсо встроенным Photon Application builder на виртуальную машину требуется:

Скачать образы виртуальной машины и операционной системы с официальных сайтов #"785074.files/image001.jpg">

Рисунок 1. Вид при начале работы приложения

3.3 Разработка алгоритма функционирования программы


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

.   зеленый для водителей начинает мигать (Рисунок 2);

2.      выключает зеленый для водителей и включает желтый (Рисунок 3);

.        выключает желтый и включает красный (Рисунок 4);

.        включает зеленый для пешеходов и таймер (Рисунок 5);

.        по достижении таймера 3 секунд зеленый для пешеходов начинает мигать (Рисунок 6);

.        включается желтый для водителей в дополнение к красному (Рисунок 8);

.        включается зеленый для водителей (Рисунок 9).

3.4 Демонстрация работы приложения


Демонстрация была проведена на машине с VMware Player, где была создана виртуальная машина с ОСРВ QNX.

Рисунок 2. Прошло минимальное время ожидания, кнопка нажата. Зеленый для водителей начал мигать

Рисунок 3. Включается желтый для водителей. Зеленый отключается

Рисунок 4. Включается красный для водителей. Желтый отключается

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

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

Рисунок 7. Загорается красный для пешеходов

Рисунок 8. Загорается желтый для водителей

Рисунок 9. Загорается зеленый для водителей. Желтый и красный отключаются. Система вернулась в начальное состояние, таймер обнулен

автоматизированный виртуальный контроллер светофор

Заключение


В ходе выполнения курсовой работы был разработан контроллер управления кодовым замком, который работает в режиме реального времени и точно реагирует на нажатие кнопок. Использование Photon application builder позволило создать данное приложение без особых сложностей. Приложение выполняет все поставленные задачи/подзадачи и имеет приятный интерфейс.


Список ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ


1.      А.А. Блискавицкий, С.В. Кабаев. Операционные системы реального времени (обзор)// Средства и системы компьютерной автоматизации. <http://www.asutp.ru> (дата обращения 07.04.2015).

.        Жданов А.А. Операционные системы реального времени// "PCWeek", №8, 1999.

.        Оксфордский словарь английского языка // 2005.

.        Роберт Кертен. Введение в QNX Neutrino руководство для разработчиков приложений реального времени // 2-е издание. Санкт-Петербург: БХВ-Петербург, 2011. - 354 с.

.        Сергей Сорокин. Системы Реального Времени. // СТА. - 1997. - №2. - С 22-29.

.        Сергей Зыль. Проектирование, разработка и анализ программного обеспечения систем реального времени. // Санкт-Петербург: БХВ-Петербург, 20с. + CD. - Библиогр.: с. 318-назв.

.        Сергей Зыль. ОС реального времени QNX: от теории к практике. 2-е издание. // 1\310З-96.

.        Эрик Верхалст. Задача разработки ОСРВ для цифровой обработки сигналов // Мир компьютерной автоматизации. - 1997. - №4

9.      Photon Programmer's Guide //2007


Приложение


Pushbutton.c

/* Your Description*/

/*AppBuilder Photon Code Lib */

/*Version 2.03*/

/* Standard headers*/

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <string.h>

/* Local headers*/

#include "ablibs.h"

#include "abimport.h"

#include "proto.h"cout=0;mytest=0;

( PtWidget_t *widget, ApInfo_t *apinfo, PtCallbackInfo_t

*cbinfo )

{

/* eliminate 'unreferenced' warnings */= widget, apinfo = apinfo, cbinfo = cbinfo;(mytest==0)%если светофор находится в исходном состоянии(зеленый

для машин, красный для пешеходов) реагируем на нажатие кнопки

mytest=10;( Pt_CONTINUE );

}

Ontimer.c

/*Your Description*/

/*AppBuilder Photon Code Lib*/

/*Version 2.03*/

/*Standard headers*/

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <string.h>

/*Local headers*/

#include "ablibs.h"

#include "abimport.h"

#include "proto.h"int mytest;int count=0;mytime=0;special=0;s[256];remember=0;

//int sec=0;

( PtWidget_t *widget, ApInfo_t *apinfo, PtCallbackInfo_t *cbinfo )

{

/* eliminate 'unreferenced' warnings */= widget, apinfo = apinfo, cbinfo = cbinfo;++;(mytime==1)

{(ABW_clr,Pt_ARG_INSIDE_COLOR,PgARGB(0,105,105,1

05),0);(ABW_cly,Pt_ARG_INSIDE_COLOR,PgARGB(0,105,105,1

05),0);(ABW_clg,Pt_ARG_INSIDE_COLOR,PgARGB(0,0,255,0),0

05),0);(ABW_crr,Pt_ARG_INSIDE_COLOR,PgARGB(0,255,0,0),0

);

}

if(mytest==10)%если пешеход нажал кнопку

{

if(mytime>=50)%если у автомобилей достаточно долго горел зеленый,

начинаем цикл

{

mytest=1;

special=0;

count=0;

remember=0;

}

}

if(mytest==1)%зеленый у водителей начинает мигать

{++;++;(remember<3)

{(count==5)

{(ABW_clg,Pt_ARG_INSIDE_COLOR,PgARGB(0,105,105,1

05),0);

}(count==10)

{=0;(ABW_clg,Pt_ARG_INSIDE_COLOR,PgARGB(0,0,255,0),0

);=remember+1;

}

}(special==45)%у водителей включается желтый сигнал

{(ABW_clg,Pt_ARG_INSIDE_COLOR,PgARGB(0,105,105,1

05),0);(ABW_cly,Pt_ARG_INSIDE_COLOR,PgARGB(0,255,255,0

),0);

}

if(special==60)%у водителей отключается желтый и включается

красный сигнал

{(ABW_cly,Pt_ARG_INSIDE_COLOR,PgARGB(0,105,105,1

05),0);(ABW_clr,Pt_ARG_INSIDE_COLOR,PgARGB(0,255,0,0),0

);=2;=0;

}

}(mytest==2)%начинается цикл пешеходов

{

special++;

if(special==30)%у пешеходов загорается зеленый, начинается обратный

отсчет секундомера

{(ABW_crg,Pt_ARG_INSIDE_COLOR,PgARGB(0,0,255,0),

0);(ABW_crr,Pt_ARG_INSIDE_COLOR,PgARGB(0,105,105,1

05),0);=0;=10;=3;(s,"%d",remember);(ABW_PtText1,Pt_ARG_TEXT_STRING,s,0);=0;

}

}

if(mytest==3)%считаем секунды, пока у пешеходов горит зеленый свет

{++;(count==10)%прошла одна секунда

{=remember-1;=0;(s,"%d",remember);(ABW_PtText1,Pt_ARG_TEXT_STRING,s,0);

}

if(remember==0)%время пешеходов истеко, выключаем зеленый для

пешеходов и включаем красный

{=4;(s,"%d",remember);(ABW_PtText1,Pt_ARG_TEXT_STRING,s,0);(ABW_crg,Pt_ARG_INSIDE_COLOR,PgARGB(0,105,105,1

05),0);(ABW_crr,Pt_ARG_INSIDE_COLOR,PgARGB(0,255,0,0),0

);=0;

special=0;

}

if(remember<=3 && remember>0)%если у пешеходов осталось 3

секунды до конца зеленого сигнала начинаем мигать зеленым сигналом

{=100;

}(special==100)

{(count==5 & remember!=1)

{(ABW_crg,Pt_ARG_INSIDE_COLOR,PgARGB(0,105,105,1

05),0);

}(count==0)

{(ABW_crg,Pt_ARG_INSIDE_COLOR,PgARGB(0,0,255,0),

0);

}

}

}

if(mytest==4)%закончили цикл пешеходов, начали цикл начала

движения у машин

count++;

if(count==30)%включаем желтый сигнал для автомобилей

PtSetResource(ABW_cly,Pt_ARG_INSIDE_COLOR,PgARGB(0,255,255,0

),0);(count==60)%завершение цикла работы нажатия на кнопку, возвращение системы в исходное состояние

{=0;=0;=0;=0;=0;

}

}( Pt_CONTINUE );

//PtSetResource(ABW_PtLabel1,Pt_ARG_TEXT_STRING,"asdad",0);

//sprint(s,"%2d:%2d",min,sec);

//PtSetResource(ABW_PtLabel1,Pt_ARG_TEXT_STRING,s,0);

}

Похожие работы на - Контроллер управления светофором

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!