Пояснительная записка (1210991), страница 7
Текст из файла (страница 7)
Procedure ShapeCreate;
Begin
Sh[i]:=TShape.Create (Self);
Sh[i].Left:=F[i].X*13-4;
Sh[i].Top:=F[i].Y*13-600;
Sh[i].Visible:=true;
Sh[i].Width:=8;
Sh[i].Height:=8;
Sh[i].Tag:=i;
Sh[i].OnMouseDown:=Fm.Shape1.OnMouseDown;
D_Krug.Panel1.InsertControl(Sh[i]);
end;
После заполнения всех данных и визуального отображения схематического плана происходит проверка условия определения типа объекта. В зависимости от типа элемента идет окрашивание полей соответствующим цветом и переход к следующей записи таблицы. На рисунке 2.18 представлен алгоритм извлечения данных элементов пути в виде блок-схемы.
Рисунок 2.18 – Алгоритм извлечения и заполнения данных элементов пути из БД
Для получения данных о стрелках требуется сформировать текст запроса к БД и подключиться к ней. Ниже приведет фрагмент листинга программы:
DS5.SelectSQL.Text:=’Select * from St_Point’;
DS5.Open;
После подключения к БД проверяется условие окончания записей в таблице. Ниже приведен фрагмент листинга программы:
While Not DS5.EOF do begin
Если записи таблицы не закончились, то происходит чтение индекса номера стрелки. Далее идет заполнение данными для каждого элемента в массиве. Ниже приведен фрагмент листинга программы:
st:=DS5.FBN('NOM').AsInteger;
Point[st].IndexF:=DS5.FBN('IndexF').AsInteger;
Point[st].DirPl:=DirSet(byte(DS5.FBN('DirPl').AsInteger));
Point[st].DirMn:=DirSet(byte(DS5.FBN('DirMn').AsInteger));
Point[st].MaskPl:=DS5.FBN('MaskPl').AsInteger;
Point[st].MaskMn:=DS5.FBN('MaskMn').AsInteger;
Point[st].IndSm:=DS5.FBN('IndSm').AsInteger;
Point[st].PlaceO:=Direct(byte(DS5.FBN('PlaceO').AsInteger));
После заполнения всех данных по стрелкам цикл заканчивается. На рисунке 2.19 представлен алгоритм извлечения и заполнения данных стрелок в виде блок-схемы.
Рисунок 2.19 – Алгоритм извлечения и заполнения данных стрелок из БД
Для получения данных о светофорах требуется сформировать текст запроса к БД и подключиться к ней. Ниже приведет фрагмент листинга программы:
DS2.SelectSQL.Text:=’Select * from St_Signal’;
DS2.Open;
После подключения к БД проверяется условие окончания записей в таблице. Ниже приведен фрагмент листинга программы:
While Not DS2.EOF do begin
Если записи таблицы не закончились, то происходит чтение номера станции и индекса номера светофора. Далее идет заполнение данными для каждого элемента в массиве. Ниже приведен фрагмент листинга программы:
Nom_Sv:=DS2.FBN('Nom').AsInteger mod 1000;
Sv[N_St,Nom_Sv].Field:=DS2.FBN('N_Field').AsInteger;
Sv[N_St,Nom_Sv].Typ:=SignTypeSet(byte(DS2.FBN('Typ').
AsInteger));
Sv[N_St,Nom_Sv].IP:=DS2.FBN('IP').AsInteger;
Sv[N_St,Nom_Sv].H:=DS2.FBN('H').AsInteger;
После заполнения всех данных по стрелкам цикл заканчивается. На рисунок 2.20 представлен алгоритм извлечения и заполнения данных светофоров в виде блок-схемы.
Рисунок 2.20 – Алгоритм извлечения и заполнения данных стрелок из БД
Для получения данных о секциях требуется сформировать текст запроса к БД и подключиться к ней. Ниже приведет фрагмент листинга программы:
DS4.SelectSQL.Text:=’Select * from St_Section’;
DS4.Open;
После подключения к БД проверяется условие окончания записей в таблице. Ниже приведен фрагмент листинга программы:
While Not DS4.EOF do begin
Если записи таблицы не закончились, то происходит чтение номера станции и индекса номера секции. Далее идет заполнение данными для каждого элемента в массиве. Ниже приведен фрагмент листинга программы:
e:=DS4.FBN('Nom').AsInteger mod 1000;
N_St:=DS4.FBN('N_Station').AsInteger;
Sec[N_St,e].Nom:=e;
Sec[N_St,e].IndF:=DS4.FBN('IndF').AsInteger;
Sec[N_St,e].Typ:=SecType(byte(DS4.FBN('Typ').AsInteger));
Для того чтобы обозначить начало секции необходимо чтение индекса элемента пути и присвоение ему первое поле секции. Ниже приведен фрагмент листинга программы:
I:=DS4.FBN('N_Field').AsInteger;
I:=F[i].First+1000*N_St;
После этого идет проверка условия окончания секции, если целая часть числа индекса от деления больше 0, то выполняется присвоение данному элементу массива номера секции и присвоение индексу элемента пути следующего поля секции, после чего переход к следующей записи. Ниже приведен фрагмент листинга программы:
While (I mod 1000) > 0 do
Begin
F[I].NSec:=Sec[N_St,e].Nom;
I:=F[I].Next+1000*N_St;
end;
После заполнения всех данных по секциям цикл заканчивается. На рисунок 2.21 представлен алгоритм извлечения и заполнения данных светофоров в виде блок-схемы.
Рисунок 2.21 – Алгоритм извлечения и заполнения данных стрелок из БД
Контроль свободности секций обеспечивается за счёт свободности всех элементов путевого развития, находящихся в пределах данной стрелочной секции. Первоначально принимается, что секция свободна. Далее присваивается индексу номера первого поля секции. Ниже представлен фрагмент листинга программы:
Sec[I].SecFree:={ };
F[I].First:=I;
После этого проверяется условие что индекс следующего поля не равен 0:
F[I].Next <> 0;
Если поле свободно, то индексу элемента пути присваивается номер следующего поля секции и происходит возвращение к предыдущему условию:
F[I].Next:=I;
Если, обнаружив что, хотя бы один заняты элемент пути является занятым, то указывается занятость всей секции:
Sec[I].Use:=1;
После проверки свободности секции цикл заканчивается. На рисунке 2.22 представлен алгоритм проверки свободности элементов пути в секции в виде блок-схемы.
Рисунок 2.22 – Алгоритм извлечения и заполнения данных стрелок из БД
-
Описание форм программы
-
Основная форма
Во время запуска программы появляется главное окно. После нажатие кнопки «Начать работу» происходит считывание информации из базы данных, согласно алгоритмам и визуальное отображение схематического плана станции и всего участка диспетчерского управления, согласно рисунку 2.23.
Рисунок 2.23 – Основная форма программы
Под цифрой 1 отмечена панель, на которой формируется схематический план. Схематический план представляет собой совокупность упорядоченных шильдиков (путевой участок, стрелки, светофоры). Под цифрой 2 обозначен текстовый редактор, с помощью которого отображается информация выбранного поля или объекта (номер поля, номер станции, координаты, тип и номер объекта). Фрагмент листинга программы вывода информации:
D_Krug.Memo1.Lines.Add(IntToStr(N_St)+'-'+IntToStr(D)+'-'+IntToStr(Sec[N_St,e].Nom));
D_Krug.Memo2.Lines.Add('Номер станции: '+ IntToStr(N_St));
D_Krug.Memo2.Lines.Add('Номер поля: '+ IntToStr(K));
D_Krug.Memo2.Lines.Add('Координата X поля: '+IntToStr(F[K].X));
D_Krug.Memo2.Lines.Add('Координата Y поля: '+IntToStr(F[K].Y));
D_Krug.Memo2.Lines.Add('Тип объкта: '+ IntToStr(byte(F[K].ObjT)));
D_Krug.Memo2.Lines.Add('Номер секции: '+ IntToStr(F[K].Nsec));
If Sec[N_St,e].Typ=SP then D_Krug.Memo2.Lines.Add('Тип секции: стрелочный участок');
If Sec[N_St,e].Typ=PU then D_Krug.Memo2.Lines.Add('Тип секции: бесстрелочный участок');
If Sec[N_St,e].Typ=BU then D_Krug.Memo2.Lines.Add('Тип секции: блок-участок');
If Sec[N_St,e].Typ=PP then D_Krug.Memo2.Lines.Add('Тип секции: приемо-отправочный путь');
If Sec[N_St,e].Typ=IP then D_Krug.Memo2.Lines.Add('Тип секции: подъездной путь');
If Sec[N_St,e].Typ=NC then D_Krug.Memo2.Lines.Add('Тип секции: нецентрализованный участок');
If F[K].ObjT=strel then
D_Krug.Memo2.Lines.Add('Номер стрелки: '+ IntToStr(F[K].NObj));
If F[K].ObjT=svet then
begin
D_Krug.Memo2.Lines.Add('Номер светофора: '+ IntToStr(F[K].NObj));
D_Krug.Memo2.Lines.Add('Тип светофора: '+ IntToStr(byte(Sv[N_St,m].Typ)));
If Chet In Sv[N_St,m].Typ then D_Krug.Memo2.Lines.Add('Четный');
If NChet In Sv[N_St,m].Typ then D_Krug.Memo2.Lines.Add('Нечетный');
If Poesd In Sv[N_St,m].Typ then D_Krug.Memo2.Lines.Add('Поездной');
If Man In Sv[N_St,m].Typ then D_Krug.Memo2.Lines.Add('Маневровый');
If Dop In Sv[N_St,m].Typ then D_Krug.Memo2.Lines.Add('Дополнительный');
Под цифрой 3 отмечен второй текстовый редактор, который содержит в себе историю выбранных ранее путевых участков. Цифрой 4 обозначен номер станции и ее название. Для просмотра прилегающего перегона или других станций необходимо воспользоваться полосой прокрутки, находящейся в нижней части формы.
-
Форма редактирования данных
Для того чтобы открыть форму редактирования, необходимо нажать на кнопку «Редактирование данных». Далее появляется окно, согласно рисунку 2.24.
Рисунок 2.24 – Форма редактирования данных путевого участка
На форме располагается компонент для работы с вкладками PageConrol – обозначен цифрой 1. Под цифрой 2 выделены вкладки редактирования полей, стрелок, светофоров, секций и маршрутов. Цифрой 3 указана таблица базы данных путевых участков, содержащая различные записи. Под цифрой 4 выделен компонент связанный с определенным полем таблицы в базы данных. Под цифрой 5 Указан компонент, который содержит в себе поле для ввода новых данных и кнопку на сохранение этих данных в таблице базы данных. Цифрой 6 обозначен компонент, содержащий название записи таблицы.
Для выбора формы редактирования стрелок, светофоров, секций и маршрутов, необходимо нажать на соответствующую вкладку. На рисунках 2.25, 2.26 и 2.27 показаны формы редактирования стрелок, светофоров и секций.
Рисунок 2.25 - Форма редактирования данных стрелок
Рисунок 2.26 - Форма редактирования данных светофоров
Рисунок 2.27 - Форма редактирования данных секций
-
Экономическая часть
-
Характеристика проекта
-
Целью данного дипломного проекта является создание программы-редактора к системе обучения ДСП и ДНЦ в лабораториях кафедры «ОПиБТ». Существующий программный комплекс предоставляет возможность обучающимся выступать в роли ДСП одной из станций или ДНЦ одного из округов. Таким образом, во время процесса обучения студенты располагаются за рабочими местами и осуществляют работу ДСП или ДНЦ.
Перспективы применения проектируемой системы определяются ее функциональным назначением. Одной из поставленных задач является улучшение качества образовательного процесса студентов через увеличение моделируемых учебных ситуаций, связанных с работой железнодорожных станций.
У проходящих обучение и повышение квалификации возникали предложения, о создании реальных участков железной дороги, на базе этой системы. Поэтому было принято решение о создании редактора, который позволяет осуществлять изменения в текущем комплексе, а также создавать новые обучающие системы с другими участками, взяв за основу уже созданную структуру и меняя ее под любые задачи. Ранее, не имея такой программы, пришлось бы начинать проектировать подобный комплекс обучения с самого начала, что повлекло бы за собой трату большого количества времени и ресурсов.
















