Компьютерное моделирование беспроводных AD-HOC сетей для целей расчета времени связи мобильных абонентов
Использование базы данных статистики последовательного соединения мобильных узлов беспроводной сети с использованием средств программирования Delphi и языка ADO. Оптимизация, отладка и тестирование программы AD-HOC сетей, решение аномалий в узлах сети.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 13.06.2012 |
Размер файла | 1,7 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Оглавление
- Постановка задачи
- Подход к решению поставленной задачи
- База данных статистики последовательного соединения мобильных узлов беспроводной сети
- Нормализация
- Первая нормальная форма
- Вторая нормальная форма
- Третья нормальная форма
- Среда программирования Delphi
- Объектно-ориентированные особенности языка ADO
- Методы программирования
- Автоматическое добавление записи в таблицу «Испытание»
- Отображение всех данных из Базы Данных
- Фильтрация Базы данных
- Автоматическая проверка на образование связей между узлов и образование сети
- Рекурсивная функция проверки образовавшейся сети и нахождение ее пути
- Оптимизация программы
- Отладка и тестирование программы
- Инструкция пользователю
- Системные требования
- Инструкция пользователя
- Задание параметров поля
- Автоматическое заполнение начальных параметров узлов
- Ручное редактирование начальных параметров узлов
- Начало компьютерного моделирования AD-HOC сетей
- Остановка компьютерного моделирования AD-HOC сетей
- Просмотр Базы Данных и полученных результатов
- Открытие существующей Базы Данных
- Создание новой Базы Данных
- Отображения данных об одном испытание
- Отображения всех данных Базы данных
- Закрытие окна “База данных”
- Выход из программы
- Аномалии
- Ручное редактирование начальных параметров узлов
- Экономическая часть
- Заключение
- Литература
- ПриложениЯ
Список иллюстраций
Рисунок 1 Граф, метод «Черного ящика»
Рисунок 2- Вторая Нормальная Форма
Рисунок 3 - Третья Нормальная Форма
Рисунок 4 Входная форма начальных параметров поля
Рисунок 5 Входная форма начальных параметров мобильных узлов, их количества и количества возникновения сетей
Рисунок 6 Выходная форма вывода результата моделирования связи мобильных узлов
Рисунок 7 - Главное Меню - Дополнительно
Рисунок 8 - Начальные параметры
Рисунок 9 - Главное Меню - Файл
Рисунок 10 - Главная форма (Обрезанная)
Рисунок 11 - Выпадающее меню при нажатие Правой Кнопкой Мыши (ПКМ) на изображение
Рисунок 12 Главное меню - База даныых
Рисунок 13 Создание новой БД
Рисунок 13 Окно выбора файла
Рисунок 14 - Отображение Базы Данных
Введение
Институт проблем управления им. В.А. Трапезникова РАН занимается исследованиями в области управления техническими, организационными и социальными структурами. В институте имеется обширная научная библиотека, включающая в себя не только книги, но и результаты проводимых в нем конференций.
В последние годы лаборатория разработки методологии проектирования систем прямого цифрового управления занимается математическим моделированием физических процессов. Задача моделирования, формирования динамических свойств тренажера для подготовки обслуживающего персонала технологического оборудования. Включение моделей в тренажер позволяет оператору не только ознакомиться с технологией процесса, но и тренироваться в процессе управления оборудованием, выходя за рамки рабочего режима и имитируя критические ситуации, что невозможно реализовать на реальной аппаратуре.
В настоящее время основным научным направлением лаборатории является “Разработка методов и средств моделирования и проектирования средств и систем управления”.
В рамках этого направления:
· проводятся разработки средств и методов решения задач атмосферного мониторинга. Исследуется устойчивость алгоритмов решения обратной задачи атмосферной оптики для построения систем управления контролем выбросов в окружающую среду.
· выполняются исследования и разработка теоретических и методологических основ математического моделирования физических процессов.
Постановка задачи
Написать программу для просмотра статистики последовательного соединения мобильных узлов (абонентов) беспроводной сети, произвольно движущихся по заданной области. После осуществления заданного числа последовательных соединений или самостоятельной остановки работы программы требуется усреднить время, вывести полученный результат для анализа на экран монитора и сохранить его в Базе Данных MS Access.[1][2]
Подход к решению поставленной задачи.
Для решения поставленной задачи задается:
· количество узлов беспроводной сети
· радиус действия каждого узла (дальность действия радиосвязи),
· скорость движения мобильных узлов,
· а так же положение и направление движения.
Заполнение таблицы для удобства сделано автоматическим по определенным правилам с возможностью ручного редактирования. Каждый узел выбирает случайную точку и движется к ней по прямой линии с заданной случайной скоростью; затем каждый узел выбирает следующую точку для смены направления движения, и меняет скорость движения в соответствии с заданным диапазоном возможных скоростей. И так далее.
Заданные начальные параметры испытания и результаты, полученные в результате работы программы, сохраняют в Базе Данных MS Access, подключенной к данной программе.
Информация о возникновении связей между узлами отслеживается; образование сети, и время разрыва сети записываются в таблицу.
После того, как сеть образовалась заданное количество раз, или была самостоятельно остановлена работа программы, подсчитывается среднее время жизни (образования) сети и записываются полученные результаты в базу данных.
База данных статистики последовательного соединения мобильных узлов беспроводной сети.
Нормализация
Процесс преобразования базы данных к виду, отвечающему нормальным формам, называется нормализацией. Нормализация позволяет обезопасить базу данных от логических и структурных проблем, называемых аномалиями данных.[3][4]
Исходное отношение (концептуальные требования):
· Испытание;
· Начальные параметры;
· Соединения;
· Параметры поля;
Первая нормальная форма
Таблица находится в первой нормальной форме, если каждый её атрибут атомарен и все строки различны. Под выражением «атрибут атомарен» понимается, что атрибут может содержать только одно значение. Таким образом, наши концептуальные требования не соответствуют 1НФ таблицы по полю «Испытание», в полях которого хранятся списки значений. Для приведения данных к 1НФ обычно требуется разбить концептуальные требования на несколько отдельных отношений:
· Номер испытания;
· Дата испытания;
· Начало испытания;
· Окончание испытания;
· Количество узлов;
· Количество совпадений;
· Среднее время жизни сети;
· Путь образовавшейся сети;
· Время образования сети;
· Время разрыва сети;
· Время “жизни” сети;
· Ширина поля;
· Высота поля;
· Условие задачи радиуса;
· Условие задачи скорости;
· Начальное положение узла;
· Начальное направление узла;
· Радиус узла;
· Начальная скорость узла;
Вторая нормальная форма
(
Таблица находится во второй нормальной форме, если она находится в первой нормальной форме, и при этом любой её атрибут, не входящий в состав первичного ключа, функционально полно зависит от первичного ключа. Функционально полная зависимость означает, что атрибут функционально зависит от всего первичного ключа, но при этом не находится в функциональной зависимости от какой-либо его части.
Третья нормальная форма
(Приложение А, Рисунок 3)
Таблица находится в третьей нормальной форме, если она находится во второй нормальной форме, и при этом любой её не ключевой атрибут функционально зависит только от первичного ключа.
Данные таблицы уже находятся в 3НФ.
В нашем случае трех НФ достаточно.
Среда программирования Delphi.
Программа разработана и написана на языке программирования Delphi, т.к. она позволяет быстро и надежно обрабатывать данные, пользуясь объектно-ориентированных особенностей языка, и сохранять результаты в Базе Данных, созданной в Microsoft Office Access 2003, с помощью ADO.[5]
Таблица 1 Сравнения языков программирования
Язык |
Объектно-ориентированный язык программирования |
Компоненты ADO |
Удобство |
Наличие лицензии |
|
Delphi |
+ |
+ |
+ |
+ |
|
Visual C++ |
+ |
- |
+ |
- |
|
Turbo Basic |
- |
- |
- |
- |
Обоснование выбора языка программирования приведены в таблице 1. Главными причинами данного выбора стали наличие лицензии и наличие ADO компонентов, необходимы для работы с Базой Данных Microsoft Office Access 2003.
Объектно-ориентированные особенности языка:
Инкапсуляция - Объединение и скрытие объектных данных, а также обрабатывающих их методов внутри конкретного класса от пользователя называется инкапсуляцией.
Наследование - При создании новых объектов получить все свойства и методы от своих предков называют наследованием. Такие объекты унаследывают после своего создания все поля, свойства, события, методы и прочее от своих предков. Наследование часто избавляет разработчиков от рутинной работы и позволяет не мешкая приступить к разработке чего-то нового.
Полиморфизм - Это методы различных объектов, которые могут иметь одинаковые имена, но по внутреннему содержимому отличаются друг от друга.
Операторы - Список операторов через пробел: + - * / div mod not and or xor shl shr ^ = <> >= <= < > @ in is as
Типы данных - Обрабатываемые в программе данные подразделяются на переменные, константы и литералы. Константы представляют собой данные, значения которых установлены в разделе объявления констант и не изменяются в процессе выполнения программы.
Объекты - Объекты как экземпляры класса объявляются в программе в разделе var как обычные переменные. Например: var CCircle1: TColorCircle; CircleA: TCircle; Как и в случае записей, для обращения к конкретному элементу объекта (полю; свойству или методу) указывается имя объекта и имя элемента, разделенные точкой, то есть имя элемента является составным.
Классы
В языке Object Pascal классы -- это специальные типы данных, используемые для описания объектов. Соответственно объект, имеющий тип какого-либо класса, является экземпляром (instance) этого класса или переменной этого типа. Класс представляет собой особый тип записи, имеющий в своем составе такие элементы (члены, member), как поля, свойства и методы. Поля класса аналогичны полям записи и служат для хранения информации об объекте. Методами называются процедуры и функции, предназначенные для обработки полей. Свойства занимают промежуточное положение между полями и методами.
ADO.
ADO (от англ. ActiveX Data Objects -- «объекты данных ActiveX») -- интерфейс программирования приложений для доступа к данным, разработанный компанией Microsoft (MS Access, MS SQL Server) и основанный на технологии компонентов ActiveX. ADO позволяет представлять данные из разнообразных источников (реляционных баз данных, текстовых файлов и т. д.) в объектно-ориентированном виде. [6]
Объектная модель ADO состоит из следующих объектов высокого уровня и семейств объектов:
§ Connection (представляет подключение к удалённому источнику данных)
§ Recordset (представляет набор строк, полученный от источника данных)
§ Command (используется для выполнения команд и SQL-запросов с параметрами)
§ Record (может представлять одну запись объекта Recordset или же иерархическую структуру, состоящую из текстовых данных)
§ Stream (используется для чтения и записи потоковых данных, например, документов XML или двоичных объектов)
§ Errors (представляет ошибки)
§ Fields (представляет столбцы таблицы базы данных)
§ Parameters (представляет набор параметров SQL-инструкции)
§ Properties (представляет набор свойств объекта)
Компоненты ADO используются в языках высокого уровня, таких как VBScript в ASP, JScript в WSH, Visual Basic, Delphi.
Методы программирования.
Автоматическое добавление записи в таблицу «Испытание»:
Form2.ADOTable1.Last;
Form2.ADOTable1.Insert;
Form2.ADOTable1.FieldByName('Дата').AsString:=Data;
Form2.ADOTable1.FieldByName('Начало').AsString:=TimeStart;
Form2.ADOTable1.FieldByName('Окончание').AsString:=TimeEnd;
Form2.ADOTable1.FieldByName('Узлов').AsInteger:=k;
Form2.ADOTable1.FieldByName('Совпадений').AsInteger:=j;
Form2.ADOTable1.FieldByName('Среднее время жизни').AsString:=TimeToStr(SrTime);
Form2.ADOTable1.Post;
Form2.ADOTable1.Refresh;
Form2.ADOTable1.Last;
Примечание: автоматическое добавление записей в таблицы «Соединения», «Параметры поля» и «Начальные параметры» происходит аналогично приведенному примеру выше, на таблице «Испытание».
Отображение всех данных из Базы Данных.
ADOConnection1.Connected:=False;
ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+ExtractFilePath(Application.ExeName)+'\БД\AllStat.mdb;Persist Security Info=False';
ADOConnection1.Connected:=True;
ADOTable1.Active:=True;
ADOTable2.Active:=True;
ADOTable3.Active:=True;
ADOTable4.Active:=True;
ADOTable1.FieldByName('Id').Visible:=true;
ADOTable2.FieldByName('Id').Visible:=false;
ADOTable3.FieldByName('Id').Visible:=false;
ADOTable4.FieldByName('Id').Visible:=false;
DBGrid1.Columns[0].Title.Caption:='№';
DBGrid1.Columns[0].Width:=20;
DBGrid3.Columns[1].Width:=138;
except
MessageDlg('Ошибка при открытие Базы Данных!Доступ ограничен, либо отсутствует!'+#13'Данные испытаний не будут внесены в Базу',mtError,[mbOk],0);
ADOConnection1.Connected:=False;
Form1.N7.Enabled:=False;
end;
end;
Фильтрация Базы данных
ADOTable2.Filtered:=False;
ADOTable3.Filtered:=False;
ADOTable4.Filtered:=False;
ADOTable2.Filter:='Испытание='+ADOTable1.FieldByName('Id').AsString; ADOTable3.Filter:='Испытание='+ADOTable1.FieldByName('Id').AsString;
ADOTable4.Filter:='Испытание='+ADOTable1.FieldByName('Id').AsString; ADOTable2.Filtered:=True;
ADOTable3.Filtered:=True;
ADOTable4.Filtered:=True;
Автоматическая проверка на образование связей между узлов и образование сети:
procedure LifePath(j:integer);
var l,x0,y0,r1,x2,y2:integer;
s:byte; str:string;
begin
for l:=j+1 to k do
begin
//считывание параметров
r1:=StrToInt(Form1.StringGrid1.Cells[6,j]);
x2:=StrToInt(Form1.StringGrid1.Cells[1,j]);
y2:=StrToInt(Form1.StringGrid1.Cells[2,j]);
//изменение параметров для вычислений в соответствие с радиусом
if r1>StrToInt(Form1.StringGrid1.Cells[6,l]) then
begin
r1:=StrToInt(Form1.StringGrid1.Cells[6,l]);
x0:=StrToInt(Form1.StringGrid1.Cells[1,l]);
y0:=StrToInt(Form1.StringGrid1.Cells[2,l]);
end
else
begin
x0:=x2;
y0:=y2;
x2:=StrToInt(Form1.StringGrid1.Cells[1,l]);
y2:=StrToInt(Form1.StringGrid1.Cells[2,l]);
end;
//проверка соединения
if (sqr(x2-x0)+sqr(y2-y0))<=sqr(r1) then
begin
Connect[j-1,l-1]:=1;
Connect[l-1,j-1]:=1;
//прорисовка соединения
Form1.Image1.Canvas.Brush.Style:=bsSolid;
Form1.Image1.Canvas.Pen.Color:=RGB(0,0,255);
Form1.Image1.Canvas.Pen.Width:=2;
Form1.Image1.Canvas.MoveTo(x0,y0);
Form1.Image1.Canvas.LineTo(x2,y2);
Form1.Image1.Canvas.Pen.Width:=1;
end
else
begin
Connect[j-1,l-1]:=0;
Connect[l-1,j-1]:=0;
end;
end;
//проверка сети
if flag then
begin //проверка на разрыв сети
for l:=0 to Length(Net)-2 do
if Connect[Net[l],Net[l+1]]=0 then
begin
flag:=false;
Form1.StringGrid2.Cells[2,p]:=TimeToStr(Time);
Form1.StringGrid2.Cells[3,p]:=TimeToStr((StrToTime(Form1.StringGrid2.Cells[1,p])-Time)*20);
if p=ks then
begin
Form1.Button1.Enabled:=False;
Form1.Button4.Enabled:=False;
Form1.Button2.Enabled:=True;
Form1.LabeledEdit1.Enabled:=True;
Form1.LabeledEdit2.Enabled:=True;
Form1.Timer1.Enabled:=false;
TimeEnd:=TimeToStr(Time);
Form1.CheckBox1.Enabled:=True;
//GropuBox
Form1.LabeledEdit3.Enabled:=True;
Form1.LabeledEdit4.Enabled:=True;
Form1.Edit1.Enabled:=True;
Form1.Edit2.Enabled:=True;
Form1.Edit3.Enabled:=True;
Form1.Edit4.Enabled:=True;
Form1.Button5.Enabled:=True;
//ЗАПИСЬ В БД
try
if Form1.N7.Enabled then
AddDate;
Except
MessageDlg('Ошибка при добавление данных в БД',mtError,[mbCancel],0)
end;
break;
end;
end;
end
else
//проверка на появление сети
begin
for l:=0 to k-1 do
begin
s:=0;
for j:=0 to k-1 do
s:=s+Connect[l,j];
s:=s-2;
if s=1 then
begin
Net:=nil;
InfoBeginPatch(l);
if Length(Net)=k then
begin
flag:=true;
for y0:=0 to Length(net)-2 do
str:=str+IntToStr(Net[y0]+1)+'<->';
str:=str+IntToStr(Net[Length(Net)-1]+1);
for x0:=1 to Form1.StringGrid2.RowCount-1 do
if Form1.StringGrid2.Cells[0,x0]='' then
begin
p:=x0;
Form1.StringGrid2.Cells[0,p]:=str;
Form1.StringGrid2.Cells[1,p]:=TimeToStr(Time);
str:='';
break;
end;
end;
break;
end;
end;
end;
end;
Рекурсивная функция проверки образовавшейся сети и нахождение ее пути:
procedure InfoBeginPatch(i:integer);
var j,l:integer;
f,fl:boolean;
begin
// проверка на наличие связи
fl:=true;
if Length(Net)>1 then
if Connect[Net[Length(Net)-1],i]<>1 then
begin
fl:=false;
end;
if fl then
begin
SetLength(Net,length(Net)+1);
Net[length(Net)-1]:=i;
for j:=0 to k-1 do
begin
f:=false;
for l:=0 to length(Net)-1 do
begin
if j=Net[l] then
f:=true;
end;
if f then
Continue;
if Connect[i,j]=1 then
InfoBeginPatch(j);
end;
end;
end;
Аномалии
Ручное редактирование начальных параметров узлов.
Во время ручного редактирования начальных параметров может узлов может возникнуть ряд аномалий связанных с работой пользователя.
· Ошибка корректности данных - пользователь может удалить какие-либо значения из таблицы начальных параметров или ввести некорректные данные.
· Задание большого радиуса узла - пользователь может задать заведомо большой радиус узла, который выходит за заданный диапазон автоматического заполнения в начальных параметрах поля.
· Задание нулевой скорости узла - пользователь может задать нулевую скорость узла, которая нарушает условие мобильности узлов в поставленной задаче.
Рассмотрим реакции программы на данные аномалии.
· Ошибка корректности данных - перед началом моделирования данные в таблице проверяются на наличие, а за корректность ввода отвечает обработчик ввода данных с клавиатуры в таблицу.
· Задание большого радиуса узла - данная аномалия не является критичной и может являться дополнительным условие к данному моделированию по желанию пользователя.
· Задание нулевой скорости узла - данная аномалия так же не является критичной и может являться дополнительным условие к данному моделированию по желанию пользователя.
Оптимизация программы
Оптимизация - это процесс изменения программы по определенным критериям с целью повышения ее качества при сохранении смысла исходной программы.[7]
Для сокращения объёма кода программы он разбивается на части - подпрограммы. Каждая подпрограмма может вызываться из разных частей основной программы.
Подпрограмма - это поименованная или иным образом идентифицированная часть компьютерной программы, содержащая описание определённого набора действий. В языках программирования для оформления и использования подпрограмм существуют специальные синтаксические средства.
В языках программирования высокого уровня используется два типа подпрограмм: процедуры и функции.
Функция -- это подпрограмма специального вида, которая, кроме получения параметров, выполнения действий и передачи результатов работы через параметры имеет ещё одну возможность - она может возвращать результат. Вызов функции является, с точки зрения языка программирования, выражением, он может использоваться в других выражениях или в качестве правой части присваивания
Процедура - это любая подпрограмма, которая не является функцией.
Например, в программе написана процедура, выполняющая добавление в базу данных новой экзаменационной группы.
Также в оптимизации чаще всего нуждаются циклы. Цикл - это последовательность из нескольких (0 и больше) операторов, которая указывается в тексте программы один раз, но может выполняться несколько (0 и более) раз.
Например, цикл, выполняющий заполнение списка на основе выборки из базы данных.
Form1.ADOTable2.First;
while not Form1.ADOTable2.Eof do
begin
cbx.Items.Add(Form1.ADOTable2.FieldByName('РЕГИОН').AsString);
Form1.ADOTable2.Next;
end;
Данный цикл завершается, когда доходит до последней записи в таблице, т. е. имеет конечное число шагов. В теле цикла не содержится лишних операторов (операторов, которые можно было бы вынести за пределы тела цикла, не нарушая при этом логику работы программы).
Отладка и тестирование программы
Отладка - процесс поиска и устранения ошибок. Ошибки можно классифицировать следующим образом[7]:
· ошибки кодирования (синтаксические, семантические); например:
· fot i:=1 to Length(fld1) do begin.
· Здесь присутствует ошибка при написании оператора for. Она была исправлена следующим образом:
· for i:=1 to Length(fld1) do begin
· ошибки несоответствия алгоритму (логические); например:
· if GroupsComb.Items[GroupsComb.ItemIndex]=1 then
· Это условие никогда не выполнится, т. к. в списке отсутствует пункт с таким названием. Ошибка была исправлена следующим образом:
· if GroupsComb.Items[GroupsComb.ItemIndex]='Все'
Отладка объемной задачи, спроектированной по модульному принципу, предполагает сегментирование программы, использование отладочных печатей и контрольных точек. Контрольные точки позволяют проверить "где программа ходила", отладочные печати показывают, "что она делала". Способ отладки с помощью отладочных тестов можно применять, соблюдая принципы проверки программы как "белого ящика":
· покрытие операторов;
· покрытие решений;
· покрытие условий;
· построение функциональных диаграмм и т.д.
Отладочные средства должны проверить работу программы в нормальных, экстремальных, граничных условиях.
Современные средства программирования позволяют автоматизировать процесс отладки.
Объективным критерием правильной работы программы является ее функционирование по корректно составленному контрольному варианту тестирующих данных.
Тестирование программного обеспечения - это процесс, помогающий определить корректность, полноту и качество разработанного программного обеспечения (ПО). Главные цели тестирования - показать, что приложение соответствует требованиям и выявить наличие ошибок в логике программы[7].
Протестируем методом «Черного ящика» процедуру ввода данных о мобильных узлах.
Ситуация:
С1 - Ввод корректных данных;
С2 - Ввод некорректных данных или отсутствие ввода;
С3 - Ввод заведомо большого радиуса узла;
С4 - Ввод нулевой скорости узла.
Эффект:
Э1 - Нормальная работа программы
Э2 - Предупреждающее сообщение
Таблица 2 Метод «Черного ящика»
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
||
С1 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
|
С2 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
|
С3 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
|
С4 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
|
Э1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
||
Э2 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
Таблица 3 Метод «Черного ящика»
Данные |
Ожидаемый результат |
Реакция программы |
|
Некорректные данные |
Ошибка |
Вывод сообщения об ошибке |
|
Отсутствие ввода |
Ошибка |
Вывод сообщения об ошибке |
|
Корректные данные |
Нормальная работа программы |
Нормальная работа программы |
|
Ввод нулевой скорости |
Образование дополнительного условия моделирования |
Нормальная работа программы |
|
Ввод заведомо большого радиуса узла |
Образование дополнительного условия моделирования |
Нормальная работа программы |
Инструкция пользователю
Системные требования
· Windows 2000/XP/Vista/Seven;
· Процессор 1 600 МГц;
· 256Мб ОЗУ;
· Видеокарта 64 Мб;
· 50Мб места на жестком диске;
· Клавиатура;
· Мышь;
Инструкция пользователя
Перед началом компьютерного моделирования в данном программном продукте необходимо задать параметры поля и заполнить начальные параметры узлов.
Задание параметров поля.
В главном меню выбираем Дополнительно -> Начальные параметры (Приложение Г, Рисунок 7). Откроется окно “Начальные параметры”, изображенное в Приложение Г - Рисунок 8.
В полях Высота и Ширина задаются размеры поля в метрах, но они не должны быть больше 46340 метров (ограничение заданно в связи с недостатками языка программирования).
В полях условия выбора радиуса и полях условия выбора скорости задается диапазон задаваемых случайным образом радиусов и скоростей для каждого узла.
Для сохранения заданных параметров необходимо нажать кнопку «Принять», а для восстановления первоначально заданных параметров надо нажать кнопку «Отменить».
Автоматическое заполнение начальных параметров узлов:
1. В главном меню выбираем Файл -> Заполнить (Приложение Г, Рисунок 9);
2. На главной форме нажимаем кнопку “Заполнить” (Приложение Г, Рисунок 10);
3. Нажимаем Правой Кнопкой Мыши (в дальнейшем ПКМ) на изображение и в выпадающем меню выбираем пункт “Заполнить” (Приложение Г, Рисунок 11).
Ручное редактирование начальных параметров узлов.
Ставим галочку рядом с надписью “Редактировать значения вручную” и изменяем записи в таблице на главной форме (Приложение Г, Рисунок 10).
Примечание: Ручное редактирование надо использовать после автоматического заполнения начальных параметров узлов.
Начало компьютерного моделирования AD-HOC сетей:
1. В главном меню выбираем Файл -> Начать (Приложение Г, Рисунок 9);
2. На главной форме нажимаем кнопку “Начать” (Приложение Г, Рисунок 10);
3. Нажимаем ПКМ на изображение и в выпадающем меню выбираем пункт “Начать” (Приложение Г, Рисунок 11).
Остановка компьютерного моделирования AD-HOC сетей:
1. В главном меню выбираем Файл -> Стоп (Приложение Г, Рисунок 9);
2. На главной форме нажимаем кнопку “Стоп” (Приложение Г, Рисунок 10);
3. Нажимаем ПКМ на изображение и в выпадающем меню выбираем пункт “Стоп” (Приложение Г, Рисунок 11).
Просмотр Базы Данных и полученных результатов.
В главном меню выбираем База данных -> Просмотр БД (Приложение Г, Рисунок 12) откроется окно для просмотром данных (Приложение Г, Рисунок 15).
Открытие существующей Базы Данных.
В главном меню выбираем База данных -> Открыть БД (Приложение Г, Рисунок 12) откроется окно выбора файла (Приложение Г, Рисунок 14). Выбираем необходимый файл (с расширением *.mdb) и нажимаем кнопку открыть.
Примечание: Последующие проводимые испытания будут записываться в выбранную Базу Данных.
Создание новой Базы Данных.
В главном меню выбираем База данных -> Создать БД (Приложение Г, Рисунок 12). откроется окно для ввода имени новой Базы данных (Приложение Г, Рисунок 13). После ввода имени нажимаем кнопку “Создать” и в корневом каталоге с программой в папке «БД» будет создана новая База Данных.
Примечание: Последующие проводимые испытания будут записываться в созданную Базу Данных.
Если потребуется отменить создание новой Базы данных, то в окне (Приложение Г, Рисунок 13) нажимаем кнопку “Закрыть”.
Отображения данных об одном испытание.
В таблице «Испытания» представлены все проводимые испытания. Из них выбираем нужное нам испытание и нажимаем на него Левой Кнопкой Мыши (ЛКМ). И в таблицах «Начальные параметры», «Параметры поля» и «Соединения» отобразятся все записанные данные о выбранном испытание (Приложение Г, Рисунок 15).
Отображения всех данных Базы данных.
В окне “База данных” нажмите кнопку “Отобразить все записи” (Приложение Г, Рисунок 15).
Закрытие окна “База данных”.
В окне “База данных” нажмите кнопку “Закрыть” (Приложение Г, Рисунок 15).
Выход из программы:
1. В главном меню выбираем Файл -> Выход (Приложение Г, Рисунок 9);
2. На главной форме нажимаем кнопку “Выход” (Приложение Г, Рисунок 10);
3. В правом верхнем углу главной формы нажмите на красный крестик.(Приложение Г, Рисунок 10).
Экономическая часть
В современном мире любая организация стремится приобрести компьютеры для работы своих сотрудников, ведь данная покупка - уверенный шаг к автоматизации рабочего процесса. Компьютеры используются в различных сферах деятельности, в том числе и в науке. Научные лаборатории используют компьютеры, потому что они способствуют сокращению времени на выполнение различных операций с информацией, освобождают помещения от кипы документации, позволяют вести централизованный учёт и контроль различного рода работ и, самое главное, дают возможность более детально систематизировать научную деятельность лаборатории.
Компьютерное моделирование играет большую роль в современной научной деятельности, так как позволяет значительно сократить материальные расходы на проведение моделирования, а так же, с помощью специальных возможностей языков программирования, позволят сэкономить драгоценное время.
Цель компьютерного моделирования -- помочь ученым и научным лабораториям проводить различного рода испытания без крупных материальных затрат и с экономией времени.
Ниже будет рассмотрена экономическая эффективность программного продукта, включающего в себя компьютерное моделирование беспроводных AD-HOC сетей для целей расчета времени связи мобильных абонентов. Данный программный продукт был разработан в рамках дипломного проектирования и прошел апробацию в 29 лаборатории Институт проблем управления им. В.А. Трапезникова РАН.
Таблица 4 Краткое обозначение основных показателей
Краткое обозначение |
Расшифровка |
Значение |
|
Т.м. |
Месячный баланс рабочего времени |
174,6 ч.\ мес. |
|
Т.р. |
Время работы над курсовым проектом |
1 мес. |
|
С.ч. |
Почасовая ставка программиста |
450р.\ ч. |
|
Н.а. |
Норма амортизации |
10% |
|
С.бал. |
Балансовая стоимость основных производственных фондов(компьютера) |
15 000р. |
|
К. |
Количество компьютеров |
1 |
|
Н.им. |
Налог на имущество |
2,2% |
|
О.п.ф. |
Отчисления в пенсионный фонд |
26% |
|
О.м.ф. |
Отчисления в медицинский фонд |
2,9% |
|
О.с.с. |
Отчисления в социальное страхование |
5,1% |
Расчет экономической эффективности без применения программного продукта
1. Данную работу выполняет Кл = 1 сотрудник. Заработная плата, которого составляет: Зп.ст. = 15 000 р., но данную работу он выполняет в 20 раз дольше, чем программный продукт. Зп.общ.- общая зарплата
2. Зп.общ. = Кл*Зп.ст.= 1*20*15 000 = 300 000р.
Отчисления на социальные нужды (ОСН):
ОСН = 34%* Зп.общ.= 34*300 000 = 102 000 р.
3. Прочие затраты (З.пр.):
З.пр. = (Зп.общ. + ОСН)*7,75% = (300 000+102 000)*7,75% = 31 155р.
4. Сумма текущих расходов (С.тек.1):
С.тек.1 = Зп.общ. + ОСН +З.пр. = 300 000+102 000+31 155=433 155р.
5. Так как поиск информации не требует вычислительной техники и идет вручную, то инвестиции отсутствуют, а, следовательно, приведенные затраты (C.прив.1) равны текущим расходам (С.тек.1):
6. С.прив.1 = С.тек. 1 = 433 155р.
Расчет экономической эффективности с применением программного продукта.
7. Зарплата программиста (З.пр.)
8. З.пр. = Т.м.*Т.р.*С.ч. = 174,6*1*450 = 78 570 р.
Затраты на эксплуатацию ПК:
1) Износ ПК за время написания программы (Изн.):
2) Изн. = (Н.а.*С.бал.*Т.р.)\12 *100% = (10%*15 000*1)\12*100%=1 250 р.
3) Расход бумаги (Р.бум.):Р.бум. = (С.бум.\К.бум.)*Исп.бум = (250\500)*200=100р.
4) где: С.бум. - стоимость пачки бумаги, К.бум. - количество листов в пачке бумаги, Исп.бум. - количество используемой бумаги.
5) Налог на имущество (Н.им.):
6) Н.им. = (С.бал.*2,2%)\12*100% = (15 000*2,2%)\12*100% = 27,5р.
7) Затраты на электроэнергию(З.эл.):
8) З.эл. = Т.р.*Т.м.*Ц.э. = 174,6*1*3,20 = 558,72р.
9) Прочие расходы (Пр.р.)
10) Пр.р.=(Изн.+Р.бум+Н.им.+З.эл.)*7.75% = (1 250+10+27,5+558,72)*7,75% = 143,08р.
Отчисления на социальные нужды (ОСН):
ОСН = З.пр.*34% = 78 570*34% = 26 713,8р.
Текущие затраты(С.тек.2):
С.тек.2 = З.пр.+Изн.+Р.бум.+Н.им+З.эл.+ОСН+Пр.р. = 78 570+1 250+100+27,5+558,72+26 713,8+143,08=107 363,1р.
Приведенные затраты(С.прив.2),
С.прив.2 = С.тек.2+И*Е.н = 107 363,1+15 000*0,4 = 113 363,1р
где: И - инвестиции = С.бал., Е.н. - нормативная величина для ПК = 0,4
Сравнение экономической эффективности.
Лучший вариант считается тот, в котором приведенные затраты минимальны:
С.прив.1>С.прив.2
В данном случае вариант с использованием программного продукта лучше.
Среднегодовая эффективность (Ср.эф.):
Ср.эф. = С.прив.1-С.прив.2 = 433 155-113 363,1= 319 791,9р.
Годовая экономия от внедрения продукта(Э.год)
Э.год = С.тек.1-С.тек.2 = 433 155-107 363,1= 325 791,9р.
Фактический срок окупаемости инвестиций (Т.ок.факт.)
Т.ок.факт = И\Э.год <= Т.н.ок.
Т.ок.факт. = 15 000\325 791,9= 0,046 года < 2,5 года
где: И - инвестиции = С.бал., Т.н.ок. - нормативный срок окупаемости = 1\0,4 = 2,5 года
Вывод
В ходе анализа сравнительной экономической эффективности методом приведенных затрат можно сделать вывод, что годовая экономия от внедрения программного продукта составляет 325 791,9 руб., а фактический срок окупаемости составляет приблизительно 0,046 года, что составляет приблизительно 17 дней, и не превышает нормативного срока окупаемости равного 2,5 года.
Заключение
В результате разработки дипломной работы была написана программа для компьютерного моделирования беспроводных AD-HOC сетей с целью расчета времени связи мобильных абонентов
Созданное приложение имеет простой, понятный и грамотно составленный интерфейс. Удобство работы с программой позволяет пользователю в кратчайшее время запустить программное моделирование с самостоятельно выбранными начальными параметрами узлов и параметрами поля. Для ускорения получения окончательного результата, программа использует специальные возможности среды программирования, работающий в 20 раз быстрее реального времени. В приложении так же реализована запись результатов работы программы в Базу Данных MS Access для удобства хранения полученных результатов.
Данный программный продукт востребован и широко используется 29 лабораторией Институт проблем управления им. В.А. Трапезникова РАН, занимающейся разработкой методологий проектирования систем прямого цифрового управления.
Литература
1. Сети UMTS - Москва, издательство «Техносфера», 2007г.
2. Нэйл Рэндалл, Барри Сосински - Беспроводные решения - , издательство «Техносфера», 2007г.
3. Хомоненко А.Д. - Базы Данных: Учебник для высших учебных заведений. “КОРОНА принт”. 2004 г.
4. Иванова Г.С. - Технология программирования - издательство МГТУ имени Н.Э. Баумана, 2006г.
5. Поган А.М. - Delphi руководство программиста - Москва, издательство «Эксмо», 2006г.
6. Осипов Д. - Delphi. Профессиональное программирование - Москва, издательство "Символ-Плюс", 2006 г.
7. Майерс Г. - Искусство тестирования программ - Перевод с английского под редакцией Б.А. Позина, Москва, «Финансы и статистика»
Приложение А
Структурная схема базы данных
Рисунок 2- Вторая Нормальная Форма
Рисунок 3 - Третья Нормальная Форма
Приложение Б.
Входные формы.
Рисунок 4 Входная форма начальных параметров поля
Рисунок 5 Входная форма начальных параметров мобильных узлов, их количества и количества возникновения сетей
Приложение В.
Выходные формы
Рисунок 6 Выходная форма вывода результата моделирования связи мобильных узлов
Приложение Г.
беспроводной мобильный программирование сеть
Инструкция пользователя
Рисунок 7 - Главное Меню - Дополнительно
Рисунок 8 - Начальные параметры
Рисунок 9 - Главное Меню - Файл
Рисунок 10 - Главная форма (Обрезанная)
Рисунок 11 - Выпадающее меню при нажатие Правой Кнопкой Мыши (ПКМ) на изображение
Рисунок 12 Главное меню - База даныых
Рисунок 13 Создание новой БД
Рисунок 14 Окно выбора файла
Рисунок 15 - Отображение Базы Данных
Приложение Д
Листинг программы (Unit1).
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Grids, XPMan, Buttons, Menus, ComCtrls;//, Keyboard;
type
TForm1 = class(TForm)
Image1: TImage;
StringGrid1: TStringGrid;
Button1: TButton;
Button3: TButton;
Button4: TButton;
XPManifest1: TXPManifest;
Timer1: TTimer;
Label1: TLabel;
LabeledEdit1: TLabeledEdit;
Button2: TButton;
CheckBox1: TCheckBox;
StringGrid2: TStringGrid;
LabeledEdit2: TLabeledEdit;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
PopupMenu1: TPopupMenu;
N12: TMenuItem;
N13: TMenuItem;
N14: TMenuItem;
StringGrid3: TStringGrid;
N15: TMenuItem;
N16: TMenuItem;
GroupBox1: TGroupBox;
LabeledEdit3: TLabeledEdit;
LabeledEdit4: TLabeledEdit;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Edit1: TEdit;
Label5: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Label6: TLabel;
Edit4: TEdit;
Label7: TLabel;
Button5: TButton;
Button6: TButton;
Label8: TLabel;
ProgressBar1: TProgressBar;
N17: TMenuItem;
N18: TMenuItem;
N19: TMenuItem;
OpenDialog: TOpenDialog;
Panel1: TPanel;
LabeledEdit5: TLabeledEdit;
Button7: TButton;
Button8: TButton;
procedure FormCreate(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure LabeledEdit1KeyPress(Sender: TObject; var Key: Char);
procedure Button2Click(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure FormCanResize(Sender: TObject; var NewWidth,
NewHeight: Integer; var Resize: Boolean);
procedure Button2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure N16Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure Edit3KeyPress(Sender: TObject; var Key: Char);
procedure N17Click(Sender: TObject);
procedure N18Click(Sender: TObject);
procedure N19Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
// i:Integer;//переменная для циклов
k,ks:Integer;//количество узлов,Количество возникновения сетей
x,y:Integer;// положение узла
x1,y1:Integer;//направление узла
v:real;//Integer;//скорость
r:Integer;//радиус
// S1:Integer;//1% площади прямоугольникa
// S2:array of Integer;//площадь зоны действия узла
TimeStart,TimeEnd,Data: String; // Начало и конец испытания
Connect: array of array of Byte;//Массив всех связей
Net: array of Byte; // массив отмеченных связей 1 узла
p:Integer;//позиция текущей записи образовавщейся сети
flag:Boolean;//флаг образования сети
Par:array [0..5] of Integer;
Pix:Real; //количество квадратных метров в 1 пикселе
// LengthPath:integer;//длина пути
implementation
uses Unit2, Math;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
//var i:Real;
begin
flag:=False;
//i:=1000/3;
//Label1.Caption:=FloatToStr(RoundTo(i,-2));
Button1.Caption:='Начать';
//S1:=Round((Image1.Width*Image1.Height)/100);
Button5Click(Sender);
OpenDialog.InitialDir:=ExtractFilePath(Application.ExeName)+'БД\';
Par[0]:=StrToInt(LabeledEdit3.Text);
Par[1]:=StrToInt(LabeledEdit4.Text);
Par[2]:=StrToInt(Edit1.Text);
Par[3]:=StrToInt(Edit2.Text);
Par[4]:=StrToInt(Edit3.Text);
Par[5]:=StrToInt(Edit4.Text);
//ShowMessage(IntToStr(Form1.Height)+' '+IntToStr(Monitor.Height));
Form1.Width:=Monitor.Width+10;
Form1.Height:=Monitor.Height;
N16Click(Sender);
Image1.Canvas.Brush.Style:=bsSolid;
Image1.Canvas.Pen.Color:=RGB(255,255,255);
// Image1.Canvas.Brush.Color:=RGB(255,255,255);
Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);
// при изменение экрана
Form1.Width:=680;
Form1.Height:=575;
N16Click(Sender);
//StringGrid2.Cells[0,0]:='Id';
StringGrid2.Cells[0,0]:='Путь';
StringGrid2.Cells[1,0]:='Соединение';
StringGrid2.Cells[2,0]:='Разрыв';
StringGrid2.Cells[3,0]:='Жизнь';
StringGrid2.DefaultColWidth:=60;
StringGrid1.Cells[0,0]:='№';
StringGrid1.Cells[1,0]:='X';
StringGrid1.Cells[2,0]:='Y';
StringGrid1.Cells[3,0]:='X1';
StringGrid1.Cells[4,0]:='Y1';
StringGrid1.Cells[5,0]:='V';
StringGrid1.Cells[6,0]:='R';
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Form1.Close;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var i:integer;
begin
if MessageDlg('Вы уверены,что хотите выйти?',mtInformation,[mbYes,MbNo],0)=mrNo then
CanClose:=False
else
begin
// S2:=nil;
for i:=0 to k-1 do
Connect[i]:=nil;
Connect:=nil;
end;
end;
procedure InfoBeginPatch(i:integer);
var j,l:integer;
f,fl:boolean;
//str:String;
begin
// проверка на наличие связи
fl:=true;
if Length(Net)>1 then
if Connect[Net[Length(Net)-1],i]<>1 then
begin
fl:=false;
// Form1.Timer1.Enabled:=False;
// ShowMessage(IntToStr(Net[Length(Net)-2]+1)+'<->'+IntToStr(i+1));
// Form1.Timer1.Enabled:=true;
end;
if fl then
begin
SetLength(Net,length(Net)+1);
Net[length(Net)-1]:=i;
for j:=0 to k-1 do
begin
f:=false;
for l:=0 to length(Net)-1 do
begin
if j=Net[l] then
f:=true;
end;
if f then
Continue;
{str:='';
for l:=0 to Length(net)-2 do
str:=str+IntToStr(Net[l]+1)+'<->';
str:=str+IntToStr(Net[Length(Net)-1]+1);
Form1.Timer1.Enabled:=false;
ShowMessage(str);
Form1.Timer1.Enabled:=true;}
// else
if Connect[i,j]=1 then
InfoBeginPatch(j);
end;
end;
end;
procedure AddDate();
var i,j:Integer;
q,w:Real;
SrTime:TTime;
begin
//выситывание среднего времени жизни пути
j:=0;
SrTime:=StrToTime('00:00:00');
if p>=1 then
for i:=1 to p do
begin
if Form1.StringGrid2.Cells[2,i]='' then
break;
SrTime:=SrTime+StrToTime(Form1.StringGrid2.Cells[3,i]);
j:=j+1;
end;
if j>0 then
begin
SrTime:=SrTime/j;
//запись в данных таблицу Испытания
Form1.ProgressBar1.Max:=2+Form1.StringGrid3.RowCount+Form1.StringGrid2.RowCount;
Form1.ProgressBar1.Min:=0;
Form1.ProgressBar1.Position:=0;
Form1.ProgressBar1.Visible:=True;
Form2.ADOTable1.Last;
Form2.ADOTable1.Insert;
Form2.ADOTable1.FieldByName('Дата').AsString:=Data;
Form2.ADOTable1.FieldByName('Начало').AsString:=TimeStart;
Form2.ADOTable1.FieldByName('Окончание').AsString:=TimeEnd;
Form2.ADOTable1.FieldByName('Узлов').AsInteger:=k;
Form2.ADOTable1.FieldByName('Совпадений').AsInteger:=j;
Form2.ADOTable1.FieldByName('Среднее время жизни').AsString:=TimeToStr(SrTime);
Form2.ADOTable1.Post;
Form2.ADOTable1.Refresh;
Form2.ADOTable1.Last;
Form1.ProgressBar1.Position:=1;
end
else
begin
MessageDlg('Не было ни одного полного цикла жизни сети.'+#13+'Данные об испытание не будут сохранены в Базу Данных!',mtInformation,[mbOK],0);
Exit;
end;
//запись в таблицу Начальные параметры
for i:=0 to Form1.StringGrid3.RowCount-1 do
begin
Form2.ADOTable2.Last;
Form2.ADOTable2.Insert;
Form2.ADOTable2.FieldByName('Испытание').AsInteger:=Form2.ADOTable1.FieldByName('Id').AsInteger;
Form2.ADOTable2.FieldByName('Узел').AsInteger:=i+1;
q:=RoundTo(StrToInt(Form1.StringGrid3.Cells[1,i])*sqrt(Pix),-2);
w:=RoundTo(StrToInt(Form1.StringGrid3.Cells[2,i])*sqrt(Pix),-2);
Form2.ADOTable2.FieldByName('Положение').AsString:=FloatToStr(q)+';'+FloatToStr(w);
q:=RoundTo(StrToInt(Form1.StringGrid3.Cells[3,i])*sqrt(Pix),-2);
w:=RoundTo(StrToInt(Form1.StringGrid3.Cells[4,i])*sqrt(Pix),-2);
Form2.ADOTable2.FieldByName('Направление').AsString:=FloatToStr(q)+';'+FloatToStr(w);
// q:=RoundTo(StrToInt(Form1.StringGrid3.Cells[5,i])*Pix,-2);
Form2.ADOTable2.FieldByName('Скорость').AsString:=Form1.StringGrid3.Cells[5,i];
// q:=RoundTo(StrToInt(Form1.StringGrid3.Cells[6,i])*Pix,-2);
Form2.ADOTable2.FieldByName('Радиус').AsString:=Form1.StringGrid3.Cells[6,i];//FloatToStr(q);
Form2.ADOTable2.Post;
Form2.ADOTable2.Refresh;
Form1.ProgressBar1.Position:=Form1.ProgressBar1.Position+1;
end;
// Запись в таблицу Параметры поля
Form2.ADOTable4.Last;
Form2.ADOTable4.Insert;
Form2.ADOTable4.FieldByName('Испытание').AsInteger:=Form2.ADOTable1.FieldByName('Id').AsInteger;
Form2.ADOTable4.FieldByName('Ширина').AsInteger:=StrToInt(Form1.LabeledEdit3.Text);
Form2.ADOTable4.FieldByName('Высота').AsInteger:=StrToInt(Form1.LabeledEdit4.Text);
Form2.ADOTable4.FieldByName('Условия радиуса').AsString:=Form1.Edit1.Text+'м<=R<='+Form1.Edit2.Text+'м';
Form2.ADOTable4.FieldByName('Условия скорости').AsString:=Form1.Edit3.Text+'м/с<=V<='+Form1.Edit4.Text+'м/с';
Form2.ADOTable4.Post;
Form2.ADOTable4.Refresh;
Form1.ProgressBar1.Position:=Form1.ProgressBar1.Position+1;
// Запись в таблицу Соединения
for i:=1 to Form1.StringGrid2.RowCount-1 do
begin
if Form1.StringGrid2.Cells[2,i]='' then
break;
Form2.ADOTable3.Last;
Form2.ADOTable3.Insert;
Form2.ADOTable3.FieldByName('Испытание').AsInteger:=Form2.ADOTable1.FieldByName('Id').AsInteger;
Form2.ADOTable3.FieldByName('Путь').AsString:=Form1.StringGrid2.Cells[0,i];
Form2.ADOTable3.FieldByName('Соединение').AsString:=Form1.StringGrid2.Cells[1,i];
Form2.ADOTable3.FieldByName('Разрыв').AsString:=Form1.StringGrid2.Cells[2,i];
Form2.ADOTable3.FieldByName('Жизнь').AsString:=Form1.StringGrid2.Cells[3,i];
Form2.ADOTable3.Post;
Form2.ADOTable3.Refresh;
Form1.ProgressBar1.Position:=Form1.ProgressBar1.Position+1;
Form1.ProgressBar1.Visible:=False;
end;
end;
procedure LifePath(j:integer);
var l,x0,y0,r1,x2,y2:integer;
s:byte; str:string;
begin
for l:=j+1 to k do
begin
//считывание параметров
r1:=StrToInt(Form1.StringGrid1.Cells[6,j]);
x2:=StrToInt(Form1.StringGrid1.Cells[1,j]);
y2:=StrToInt(Form1.StringGrid1.Cells[2,j]);
//изменение параметров для вычислений в соответствие с радиусом
if r1>StrToInt(Form1.StringGrid1.Cells[6,l]) then
begin
r1:=StrToInt(Form1.StringGrid1.Cells[6,l]);
x0:=StrToInt(Form1.StringGrid1.Cells[1,l]);
y0:=StrToInt(Form1.StringGrid1.Cells[2,l]);
end
else
begin
x0:=x2;
y0:=y2;
x2:=StrToInt(Form1.StringGrid1.Cells[1,l]);
y2:=StrToInt(Form1.StringGrid1.Cells[2,l]);
end;
//проверка соединения
if (sqr(x2-x0)+sqr(y2-y0))<=sqr(r1/sqrt(Pix)) then
begin
Connect[j-1,l-1]:=1;
Connect[l-1,j-1]:=1;
// Form1.StringGrid2.Cells[j,l]:='1';
// Form1.StringGrid2.Cells[l,j]:='1';
//прорисовка соединения
Form1.Image1.Canvas.Brush.Style:=bsSolid;
Form1.Image1.Canvas.Pen.Color:=RGB(0,0,255);
Form1.Image1.Canvas.Pen.Width:=2;
Form1.Image1.Canvas.MoveTo(x0,y0);
Form1.Image1.Canvas.LineTo(x2,y2);
Form1.Image1.Canvas.Pen.Width:=1;
end
else
begin
Connect[j-1,l-1]:=0;
Connect[l-1,j-1]:=0;
// Form1.StringGrid2.Cells[j,l]:='0';
// Form1.StringGrid2.Cells[l,j]:='0';
end;
end;
//проверка сети
if flag then
begin //проверка на разрыв сети
for l:=0 to Length(Net)-2 do
if Connect[Net[l],Net[l+1]]=0 then
begin
flag:=false;
Form1.StringGrid2.Cells[2,p]:=TimeToStr(Time);
Form1.StringGrid2.Cells[3,p]:=TimeToStr((StrToTime(Form1.StringGrid2.Cells[1,p])-Time)*20);
// if Form1.StringGrid2.Cells[4,p]='' then
// Form1.StringGrid2.Cells[4,p]:='00:00:00';
if p=ks then
begin
Form1.Button1.Enabled:=False;
Form1.Button4.Enabled:=False;
Form1.Button2.Enabled:=True;
Form1.LabeledEdit1.Enabled:=True;
Form1.LabeledEdit2.Enabled:=True;
Form1.Timer1.Enabled:=false;
TimeEnd:=TimeToStr(Time);
Form1.CheckBox1.Enabled:=True;
//GropuBox
Form1.LabeledEdit3.Enabled:=True;
Form1.LabeledEdit4.Enabled:=True;
Form1.Edit1.Enabled:=True;
Form1.Edit2.Enabled:=True;
Form1.Edit3.Enabled:=True;
Form1.Edit4.Enabled:=True;
Form1.Button5.Enabled:=True;
//ЗАПИСЬ В БД
try
if Form1.N7.Enabled then
AddDate;
Except
MessageDlg('Ошибка при добавление данных в БД',mtError,[mbCancel],0)
end;
break;
end;
end;
end
else //проверка на появление сети
begin
for l:=0 to k-1 do
begin
s:=0;
for j:=0 to k-1 do
s:=s+Connect[l,j];
s:=s-2;
if s=1 then
begin
Net:=nil;
{Form1.Timer1.Enabled:=false;
ShowMessage('Begin '+IntToStr(l+1));
Form1.Timer1.Enabled:=true;}
InfoBeginPatch(l); //йцукен
if Length(Net)=k then
begin
flag:=true;
for y0:=0 to Length(net)-2 do
str:=str+IntToStr(Net[y0]+1)+'<->';
str:=str+IntToStr(Net[Length(Net)-1]+1);
for x0:=1 to Form1.StringGrid2.RowCount-1 do
if Form1.StringGrid2.Cells[0,x0]='' then
begin
p:=x0;
Form1.Label8.Caption:='Количество образовавшихся сетей: '+IntToStr(p);
Form1.StringGrid2.Cells[0,p]:=str;
Form1.StringGrid2.Cells[1,p]:=TimeToStr(Time);
str:='';
break;
end;
end;
break;
end; //концы =D
end;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var i,rPix,vPix:integer;
begin
Image1.Canvas.Brush.Style:=bsSolid;
Image1.Canvas.Pen.Color:=RGB(255,255,255);
// Image1.Canvas.Brush.Color:=RGB(255,255,255);
Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);
for i:=1 to k do
begin
//считывание информации из таблицы
x:=StrToInt(StringGrid1.Cells[1,i]);
y:=StrToInt(StringGrid1.Cells[2,i]);
x1:=StrToInt(StringGrid1.Cells[3,i]);
y1:=StrToInt(StringGrid1.Cells[4,i]);
v:=StrToFloat(StringGrid1.Cells[5,i]);
r:=StrToInt(StringGrid1.Cells[6,i]);
//изменение положения узла
vPix:=Round(v/sqrt(Pix)*1000/Timer1.Interval);
if not((x<x1+vPix)and(x>x1-vPix))then
if x<x1 then
x:=x+vPix
else
x:=x-vPix;
if not((y>y1-vPix)and(y<y1+vPix)) then
if y<y1 then
y:=y+vPix
else
y:=y-vPix;
StringGrid1.Cells[1,i]:=IntToStr(x);
StringGrid1.Cells[2,i]:=IntToStr(y);
if (x<x1+vPix)and(x>x1-vPix)and(y>y1-vPix)and(y<y1+vPix) then
begin
x:=x1;
y:=y1;
//смена направления движения
Randomize;
x1:=random(Image1.Width);
y1:=random(Image1.Height);
//смена скорости
v:=RoundTo(random*(Par[5]-Par[4])+Par[4]-0.1,-1)+0.1;
StringGrid1.Cells[3,i]:=IntToStr(x1);
StringGrid1.Cells[4,i]:=IntToStr(y1);
StringGrid1.Cells[5,i]:=FloatToStr(v);
end;
//прорисовка узла i
// Image1.Canvas.Pen.Width:=1;
Image1.Canvas.Brush.Style:=bsSolid;
Image1.Canvas.Brush.Color:=RGB(255,0,0);
Image1.Canvas.Pen.Color:=RGB(255,0,0);
Image1.Canvas.Ellipse(x-2,y-2,x+2,y+2);
Image1.Canvas.Brush.Style:=bsClear;
Image1.Canvas.TextOut(x,y-10,IntToStr(i));
Image1.Canvas.Pen.Color:=RGB(0,255,0);
// rPix:=Round(sqr(r)/Pix);
rPix:=Round(r/sqrt(Pix));
Image1.Canvas.Ellipse(x-rPix,y-rPix,x+rPix,y+rPix);
end;
for i:=1 to k-1 do
LifePath(i);
if (p=ks) and (Timer1.Enabled=false) then
Form1.Label1.Caption:=Form1.Label1.Caption+#13+'Конец: ' + TimeEnd;
end;
procedure TForm1.Button1Click(Sender: TObject);
var j,i:Integer;
begin
TimeStart:='';
TimeEnd:='';
Data:='';
for i:=1 to StringGrid1.RowCount-1 do
For j:=0 to StringGrid1.ColCount-1 do
if not(j=5) then
try
StrToInt(StringGrid1.Cells[j,i]);
except
MessageDlg('Данные в таблице введены неверно!',mtError,[mbOk],0);
Exit;
end;
// CheckBox1.Enabled:=False;
Button4.Caption:='Стоп';
N4.Caption:='Стоп';
N14.Caption:='Стоп';
if Button1.Caption='Начать' then
begin
TimeStart:=TimeToStr(Time);
Data:=DateToStr(Date);
Label1.Caption:='Начало: '+Data+' '+TimeStart;
LabeledEdit2.Enabled:=False;
Подобные документы
Моделирование поведения узлов беспроводной ad hoc сети при равномерном движении на плоскости. Разработка базы данных для хранения полученных графов и организация ее взаимодействия с другими приложениями, осуществляющими создание моделей и их анализ.
дипломная работа [1,9 M], добавлен 22.02.2016Беспроводная технология передачи информации. Развитие беспроводных локальных сетей. Стандарт безопасности WEP. Процедура WEP-шифрования. Взлом беспроводной сети. Режим скрытого идентификатора сети. Типы и протоколы аутентификации. Взлом беспроводной сети.
реферат [51,8 K], добавлен 17.12.2010Периоды развития и основные стандарты современных беспроводных сетей. История появления и области применения технологии Bluetooth. Технология и принцип работы технологии беспроводной передачи данных Wi-Fi. WiMAX - стандарт городской беспроводной сети.
презентация [1,9 M], добавлен 22.01.2014Способы организации беспроводных сетей по стандартам IEEE 802.16. WiMAX как телекоммуникационная технология, разработанная с целью предоставления универсальной беспроводной связи на больших расстояниях. Этапы построения полносвязной городской Wi-Fi сети.
курсовая работа [1,6 M], добавлен 31.08.2013Типы беспроводных сетей: PAN (персональные), WLAN (беспроводные локальные), WWAN (беспроводные сети широкого действия). Стандарты беспроводной передачи данных. Соединение Ad-Hoc, инфраструктурное соединение, репитер и мост. Безопасность Wi-Fi сетей.
контрольная работа [2,0 M], добавлен 19.01.2011Разработка технологии защиты информации беспроводных сетей, которая может применяться для повышения защиты компьютера пользователя, корпоративных сетей, малых офисов. Анализ угроз и обеспечения безопасности беспроводной сети. Настройка программы WPA.
дипломная работа [2,9 M], добавлен 19.06.2014Нейронные сети как средство анализа процесса продаж мобильных телефонов. Автоматизированные решения на основе технологии нейронных сетей. Разработка программы прогнозирования оптово-розничных продаж мобильных телефонов на основе нейронных сетей.
дипломная работа [4,6 M], добавлен 22.09.2011Анализ цели проектирования сети. Разработка топологической модели компьютерной сети. Тестирование коммутационного оборудования. Особенности клиентских устройств. Требования к покрытию и скорости передачи данных. Виды угроз безопасности беспроводных сетей.
дипломная работа [3,3 M], добавлен 22.03.2017Сравнительные характеристика протоколов организации беспроводных сетей. Структура и топология сети ZigBee, спецификация стандарта IEEE 802.15.4. Варианты аппаратных решений ZigBee на кристаллах различных производителей и технология программирования.
дипломная работа [3,0 M], добавлен 25.10.2013Понятие и суть беспроводных сетей как метода соединения информационных систем, их стандартные архитектуры и роль зоны покрытия. Характеристика современных беспроводных технологий. Безопасность сетей и риски, связанные с их практическим использованием.
презентация [346,2 K], добавлен 31.10.2013