Автоматизированная система управления метеорологических станций

Автор работы: Пользователь скрыл имя, 22 Июня 2012 в 11:56, курсовая работа

Краткое описание

Центр эксплуатации объектов наземной космической инфраструктуры осуществляет метеорологическое, аэрологическое и астрономо-геодезическое обеспечение выполнения космических программ на космодроме Байконур. Метеорологическое и астрономо-геодезическое обеспечение является одним из основных видов оперативного обеспечения при выполнении космических программ, полётов авиации и имеет своей целью создание условий для обеспечения безопасности их проведения. Метеорологический комплекс создан в 2009 году на базе отделов метеорологического и астрономо-геодезического обеспечения, в связи с расширением технологических функций по направлениям метеорологического и астрономо-геодезического обеспечения подготовки и запуска всех типов РКН, проведения метеорологического мониторинга района комплекса «Байконур», обеспечения полётов авиации на комплексе «Байконур».

Содержание

Введение
Основная часть
1 Анализ объекта автоматизации и разработка ТЗ на проектирование АС
1.1 Анализ деятельности отдела метеорологического обеспечения
1.1.1 Специализированные функции
1.1.2 Направления ответственности комплекса
1.2 Анализ существующей технологии
1.3 Цель проектирования
2 Диагностический анализ объекта автоматизации
3 Разработка системного проекта и ТЗ на проектирование и ТЗ на разработку программного продукта
3.1.1 Общие сведения
3.1.2 Назначение системы
3.1.3 Требования к системе
3.1.3 Требования к системе
3.2 Разработка требований к функциям, выполняемым системой
3.2.1 Среда функционирования системы
3.2.3 Краткая характеристика системы
3.2.4 Основные решаемые задачи
3.2.5 Метеостанция АМС-2000
3.3 Нефункциональные требования
3.3.1 Практичность
3.3.2 Требования к надежности
3.4 Ограничения проектирования
3.4.1 Требования к видам обеспечения
3.4.2 Требования к языкам программирования
3.4.3 Требования к защите информации
3.5 Интерфейсы
3.5.1 Требования к элементам пользовательского интерфейса
3.5.2 Общие требования к пользовательским интерфейсам
4 Математические и эвристические модели принятия решений для проектируемой системы.
4.1 Оценка прогноза температуры воздуха
4.2 Оценка прогноза осадков
4.3 Оценка прогноза ветра
5 Разработка модели проектируемой системы
5.1 Схема сети «МЕТЕО» метеорологического комплекса «Космического центра «Южный»
5.2 Функциональные модели и модели данных проектируемой АС
5.2.1 Разработка модели
5.2.1.1 Краткая характеристика системы
6 Разработка модели базы данных
6.1 Требования к информации
6.1.1 Данные о работе системы
8 Разработка диалогового интерфейса пользователя
8 Разработка алгоритмов, реализация и отладка компонент программного обеспечения АС.
8.1.1 Структура программы сервер
8.1.2 Дополнительная информация
8.1.3 Структура программы клиент
8.2 Сетевые компоненты
8.3 Компонент TIMER
8.4 Создание Frame
Глоссарий
Заключение
Список используемых источников
Приложение А
Приложение Б
Приложение В
Приложение Г
Приложение Д
Приложение Е
Приложение Ж

Вложенные файлы: 1 файл

КП 21.doc

— 2.14 Мб (Скачать файл)

 

onexecute:

procedure tform1.idtcpserver1execute(athread: tidpeerthread);

var

s: string;

i: integer;

begin

with athread.connection do

try

writeln('type an integer and enter');

s := readln;

try

i := strtoint(s);

writeln(s + ' squared is ' + inttostr(i*i));

except

writeln(s + ' is not an integer');

end;

finally

disconnect;

end;

end;

Методы, подобные вышеприведенному обработчику события, обязательно должны включать операторы try-finally, чтобы иметь возможность разорвать соединение с клиентом независимо от того, как происходила обработка операторов, выполняемых при соединении,  также c целью корректной обработки непредвиденных временных задержек при соединении. Скомпилируйте и сохраните проект, запустите его либо как автономную программу, либо из-под  delphi, предварительно выбрав команду главного меню ide tools / debugger options и отключив опцию integrated debugging, находящуюся в левом нижнем углу окна. Откройте консольное окно и наберите команду telnet 127.0.0.1 6002. В окне появится текст, который создает сервер. Рекомендуется применение английской нотации, так как других языков telnet не понимает. Введя, например, цифру 9, можно увидеть реакцию сервера в виде, показанном на рисунке. В действительности для обеспечения синхронизации после нажатия клавиши enter в контексте клиента на сервере происходит так называемый блокирующий вызов (временная задержка на несколько микросекунд), необходимый для обеспечения работы с другими возможными клиентами. При этом, поскольку каждый запрос от клиента обрабатывается независимо и одновременно, обслуживание со стороны сервера происходит в среднем за одно и то же время. Если бы вы программировали сервер без использования компонентов indy, то операции такого типа пришлось бы поддерживать самостоятельно. Командой exit в случае windows и 'ctrl+]' в случае unix можно завершить работу консольного окна. Если при выполнении п. 5 использовался вариант запуска из-под среды программирования, возвратите опцию integrated debugging в исходное состояние. Если необходимо спроектировать сервер, который будет не только корректно информировать своих клиентов о разрыве соединения, но и выдавать для них информацию о возникших ошибочных ситуациях, применяйте оператор try-except вместо try-finally - например, как показано в следующем примере:

procedure tdatamodule1.idtcpserver1execute(athread: idpeerthread);

var

s: string;

begin

with athread.connection do

try

try

s := readln;

// perform the task of the server here

// if no exception is raised,

// write out the server's response

writeln(s);

except

on e: exception do

begin

writeln(e.message);

end; //on

end; //try except

finally

disconnect;

end;

end;

 

Этот небольшой пример демонстрирует этапы создания простого текстового сервера, а также способы его отладки. Вышеописанный сервер является типичным примером организации современного распределенного вычисления. Особенности создания многозвенных приложений. В последнее время для удовлетворения клиентских запросов все чаще используются множественные серверы. Сервер такого типа, получив запрос клиента и частично подготовив его для дальнейшей обработки, связывается с другим сервером и передает ему трансформированный запрос или запросы. Сервер второго звена может, в свою очередь, связываться с другими серверами. Таким образом, можно говорить о многозвенной серверной архитектуре. Далее мы займемся созданием сервера доступа к данным, назначение которого состоит в том, чтобы возвращать данные из базы данных. Этот сервер, однако, не осуществляет чтения и записи в файлы базы данных непосредственно. Вместо этого он связывается с сервером базы данных в поисках данных, требуемых клиентом. Итак, мы приступаем к разработке приложения с трехзвенной архитектурой. Для создания сервера базы данных с использованием компонентов indy необходимо: Создать новый проект. Поместить на главную форму проекта экземпляр компонента tidtcpserver с палитры indy servers. Присвоить свойству defaultport экземпляра класса tidtcpserver1 значение 6001 (рекомендуется присваивать большие значения, чтобы избежать дублирования номеров портов у различных приложений), а свойству active - значение true. Добавить в проект новый модуль, выбрав команду file / new / data module, и поместить на него экземпляры компонентов sqlconnection и sqldataset с закладки dbexpress на палитре компонентов. Установить свойство connectionname класса sqlconnection в iblocal и loginprompt в false. Если вы не конфигурировали iblocal на базу данных employee.gdb, сначала проделайте эту процедуру. Установить свойство sqlconnection класса sqldataset в sqlconnection1 и присвоить свойству commandtext оператор sql: select customer, contact_first, contact_last from customer where cust_no = :cust. Вернуться к главной форме и добавить в операторе uses ссылку на data module, например unit2.
Выбрать на форме экземпляр компонента tidtcpserver и для его обработчика события onexecute ввести следующий текст:

Код Delphi

 

 

procedure tform1.idtcpserver1execute(athread: tidpeerthread);

var

cust: integer;

datamodule: tdatamodule2;

begin

with athread.connection do

try

try

datamodule := tdatamodule2.create(nil);

try

cust := strtointdef(readln, 0);

if cust = 0 then

begin

writeln('not found');

exit;

end; // if cust = 0

datamodule.sqldataset1.params[0].value := cust;

datamodule.sqldataset1.open;

if datamodule.sqldataset1.isempty then

writeln('not found.')

else

writeln(datamodule.sqldataset1.fields[0].asstring +

' contact name is '+

datamodule.sqldataset1.fields[1].asstring + ' ' +

datamodule.sqldataset1.fields[2].asstring);

except on e: exception do

 

Скомпилируйте и сохраните проект, запустите его либо как автономную программу, либо из среды разработки delphi, предварительно выбрав команду главного меню ide tools / debugger options и отключив опцию integrated debugging, находящуюся в левом нижнем углу окна. Откройте консольное окно и наберите команду telnet 127.0.0.1 6001. После соединения с сервером, в случае ввода числа 1001, можно будет увидеть его отклик с информацией из базы данных. Если количество клиентов, одновременно обращающихся к серверу, не слишком велико, не обязательно создавать экземпляры классов, обрабатывающих запросы к базе (в нашем случае datamodule), в каждом потоке, обрабатывающем клиентские запросы. Но по мере увеличения нагрузки на сервер подобная техника программирования становится оправданной. Закончив отладку сервера, можно легко создать и отладить проект с собственным клиентом. Создание клиентов, использующих indy, столь же просто, как и создание серверов. Чтение и запись данных на сервер в клиентских методах происходят при помощи тех же операторов, что и в серверных методах. Эти операторы очень похожи на стандартные операторы ввода-вывода pascal. Перед началом операций обмена данными клиент должен подключиться к серверу. Чтение и запись происходят с блокировкой, то есть клиент будет ждать, пока сервер не закончит обработку предыдущего оператора. Для создания сервера базы данных с использованием компонентов indy необходимо: Создать новый проект. Положить на форму компоненты с палитры для обеспечения работоспособности клиента, в том числе tidtcpclient. Присвоить свойствам caption меток и кнопок, положенных на форму, необходимые значения. Присвоить свойству host экземпляра класса dtcpclient значение 127.0.0.1, а свойству port - значение 6001. Выбрать на форме экземпляр компонента idtcpclient и для его обработчика события onclick ввести следующий текст:

procedure tform1.bitbtn1click(sender: tobject);

begin

with idtcpclient1 do

begin

connect;

try

writeln(edit1.text);

label3.caption := readln;

finally

disconnect;

end;

end;

end;

Скомпилируйте и сохраните проект, запустите его. При запущенном сервере клиент будет поддерживать функциональность, которую ранее обеспечивала утилита telnet. Обработка ошибок клиентского приложения похожа на обработку ошибок при работе с файлом. Так же как при работе с файлом, когда независимо от результата операций ввода-вывода после открытия файла должна обязательно последовать операция закрытия файла, у клиента после операции соединения с сервером должна следовать операция разрыва соединения. Минимально необходимый код показан в приведенном выше примере. Если клиентское приложение должно подробно диагностировать ошибочные ситуации, возможно применение оператора try-except. Клиентские компоненты indy не поддерживают события, возникающие, например, при разрыве соединения. Если пользователь не обрабатывает эти ситуации самостоятельно при помощи операторов try-finally и try-except, он может узнать об этом только во время следующего соединения с данным сервером. Споры о правильности такого выбора носят философский характер. С точки зрения разработчиков indy, такое техническое решение добавляет надежности программному обеспечению.

8.3 Компонент TIMER

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

Таймер — невизуальный компонент, который может размещаться в любом месте формы. Он имеет два свойства, позволяющие им управлять: Interval — интервал времени в миллисекундах и Enabled — доступность. Свойство Interval задает период срабатывания таймера. Через заданный интервал времени после предыдущего срабатывания, или после программной установки свойства Interval, или после запуска приложения, если значение Interval установлено во время проектирования, таймер срабатывает, вызывая событие OnTimer. В обработчике этого события записываются необходимые операции.

Если задать Interval = 0 или Enabled = false, то таймер перестает работать. Чтобы запустить отсчет времени надо или задать Enabled = true, если установлено положительное значение Interval, или задать положительное значение Interval, если Enabled = true.

Например, если требуется, чтобы через 5 секунд после запуска приложения закрылась форма — заставка, отображающая логотип приложения, на ней надо разместить таймер, задать в нем интервал Interval = 5000, а в обработчик события OnTimer вставить оператор Close, закрывающий окно формы.

Если необходимо в некоторой процедуре запустить таймер, который отсчитал бы заданный интервал, например, 5 секунд, после чего надо выполнить некоторые операции и отключить таймер, это можно сделать следующим образом. При проектировании таймер делается доступным (Enabled = true), но свойство Interval задается равным 0. Таймер не будет работать, пока в момент, когда нужно запустить таймер, не выполнится оператор

Timer1.Interval := 5000;

Через 5 секунд после этого наступит событие OnTimer. В его обработчике надо задать оператор

Timer1.Interval := 0;

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

Другой эквивалентный способ решения задачи — использование свойства Enabled. В время проектирования задается значение Interval = 5000 и значение Enabled = false. В момент, когда надо запустить таймер выполняется оператор

Timer1.Enabled := true;

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

Timer1.Enabled:=false;

который отключит таймер.

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

8.4 Создание Frame

В Delphi 5 введен новый компонент, который помогает поддерживать стилистическое единство приложения. Это Frame — фрейм. Он представляет собой нечто среднее между панелью и формой. С формой его роднит то, что он:

- проектируется отдельно, как самостоятельное окно

- имеет свой модуль — файл .pas

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

- может включаться в Депозитарий и использоваться так же, как и форма, включая наследование

С панелью фрейм роднит то, что он:

- не является самостоятельным окном Windows и может отображаться только на форме или другом контейнере

- имеет свойства, методы, события, подобные панели, а не форме

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

Информация о работе Автоматизированная система управления метеорологических станций